Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the root node of a BST.
Calling next() will return the next smallest number in the BST.
Note: next() and hasNext() should run in average O(1) time and uses O(h) memory, where h is the height of the tree.
Credits:Special thanks to @ts for adding this problem and creating all test cases.
Solution
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */publicclassBSTIterator {List<TreeNode> lst;int cur;publicBSTIterator(TreeNode root) { lst =newArrayList<>();travse(root, lst); cur =-1; }privatevoidtravse(TreeNode root,List<TreeNode> lst) {if (root ==null) {return; }travse(root.left, lst);lst.add(root);travse(root.right, lst); } /** * @return whether we have a next smallest number */publicbooleanhasNext() {return cur +1<lst.size(); } /** * @return the next smallest number */publicintnext() {if (hasNext()) { cur ++;returnlst.get(cur).val; }return0; }}/** * Your BSTIterator will be called like this: * BSTIterator i = new BSTIterator(root); * while (i.hasNext()) v[f()] = i.next(); */