173. 二叉搜索树迭代器

  1. /**
  2. * Definition for a binary tree node.
  3. * public class TreeNode {
  4. * int val;
  5. * TreeNode left;
  6. * TreeNode right;
  7. * TreeNode() {}
  8. * TreeNode(int val) { this.val = val; }
  9. * TreeNode(int val, TreeNode left, TreeNode right) {
  10. * this.val = val;
  11. * this.left = left;
  12. * this.right = right;
  13. * }
  14. * }
  15. */
  16. class BSTIterator {
  17. List<Integer> pre;
  18. Iterator<Integer> cur;
  19. public BSTIterator(TreeNode root) {
  20. pre = new ArrayList<>();
  21. preorder(root, pre);
  22. cur = pre.iterator();
  23. }
  24. public int next() {
  25. return cur.next();
  26. }
  27. public boolean hasNext() {
  28. return cur.hasNext();
  29. }
  30. private void preorder(TreeNode root, List<Integer> pre) {
  31. if (root == null)
  32. return;
  33. preorder(root.left, pre);
  34. pre.add(root.val);
  35. preorder(root.right, pre);
  36. }
  37. }
  38. /**
  39. * Your BSTIterator object will be instantiated and called as such:
  40. * BSTIterator obj = new BSTIterator(root);
  41. * int param_1 = obj.next();
  42. * boolean param_2 = obj.hasNext();
  43. */