1. 程式人生 > >173.二叉搜尋樹迭代器

173.二叉搜尋樹迭代器

實現一個二叉搜尋樹迭代器。你將使用二叉搜尋樹的根節點初始化迭代器。

呼叫 next() 將返回二叉搜尋樹中的下一個最小的數。

注意:next() 和hasNext() 操作的時間複雜度是O(1),並使用 O(h) 記憶體,其中 是樹的高度。

/**  * 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) {             s.push(root);             root = root->left;         }     }

    /** @return whether we have a next smallest number */     bool hasNext() {         return !s.empty();     }

    /** @return the next smallest number */     int next() {         TreeNode *n = s.top();         s.pop();         int res = n->val;         if (n->right) {             n = n->right;             while (n) {                 s.push(n);                 n = n->left;             }         }         return res;     } private:     stack<TreeNode*> s; };

/**  * Your BSTIterator will be called like this:  * BSTIterator i = BSTIterator(root);  * while (i.hasNext()) cout << i.next();  */