173.二叉搜尋樹迭代器
實現一個二叉搜尋樹迭代器。你將使用二叉搜尋樹的根節點初始化迭代器。
呼叫 next()
將返回二叉搜尋樹中的下一個最小的數。
注意:next()
和hasNext()
操作的時間複雜度是O(1),並使用 O(h) 記憶體,其中 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(); */