LeetCode - Binary Search Tree Iterator
阿新 • • 發佈:2018-11-08
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class BSTIterator { public: BSTIterator(TreeNode *root) { while(root){ st.push(root); root = root->left; } } /** @return whether we have a next smallest number */ bool hasNext() { return !st.empty(); } /** @return the next smallest number */ int next() { TreeNode* temp = st.top(); st.pop(); int res = temp->val; if(temp->right){ temp = temp->right; while(temp){ st.push(temp); temp = temp->left; } } return res; } private: stack<TreeNode*> st; }; /** * Your BSTIterator will be called like this: * BSTIterator i = BSTIterator(root); * while (i.hasNext()) cout << i.next(); */
find the next smallest
1.a.go right once
b.go left all the way down
2.go upwards