Leetcode: Binary Search Tree Iterator
Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the root node of a BST.
Callingnext()Will return the next smallest number in the BST.
Note:next()AndhasNext()Shocould run in average O (1) time and uses O (h) memory, where h is the height of the tree.
The idea of sequential traversal.
The stack is used to store the path from the root node to the leftmost leaf node. The top node of the stack is the smallest node. Each time the next node is taken, the top node of the stack is taken, then, place the path from the remaining node to the leftmost leaf node into the stack.
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class BSTIterator {public:stack
stk; BSTIterator(TreeNode *root) {while(!stk.empty())stk.pop();while(root){stk.push(root);root = root->left;} } /** @return whether we have a next smallest number */ bool hasNext() {return !stk.empty(); } /** @return the next smallest number */ int next() {TreeNode* tmp = stk.top();int res = tmp->val;stk.pop();tmp = tmp->right;while(tmp){stk.push(tmp);tmp = tmp->left;}return res; }};/** * Your BSTIterator will be called like this: * BSTIterator i = BSTIterator(root); * while (i.hasNext()) cout << i.next(); */