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.
思路
整体思路就是对BST进行前序遍历即可。此题重点在于设计和实现,我们在前序遍历的时候利用栈来进行,避免采用递归的方式。
需要注意利用栈的时候,C++必须利用top()函数来取栈顶的值,而不能用pop()。一定要注意pop()所在的位置。也一定要注意是否会有内存的溢出。 
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
 |  * Definition for binary tree  * struct TreeNode {  *     int val;  *     TreeNode *left;  *     TreeNode *right;  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}  * };  */ class BSTIterator { private:     stack<TreeNode*> DFS; public:     BSTIterator(TreeNode *root) {         while(root != NULL){             DFS.push(root);             root = root->left;         }     }          bool hasNext() {         if (DFS.empty()) return false;         else return true;     }          int next() {         TreeNode *cur = DFS.top();         DFS.pop();         if(cur != NULL)          {             if(cur->right != NULL){                 TreeNode *tmp = cur->right;                 while(tmp != NULL){                     DFS.push(tmp);                     tmp = tmp->left;                 }             }             return cur->val;         }         else return 0;     } };  * Your BSTIterator will be called like this:  * BSTIterator i = BSTIterator(root);  * while (i.hasNext()) cout << i.next();  */
 |