LeetCode 173.Binary Search Tree Iterator (二叉搜尋樹迭代器)
阿新 • • 發佈:2018-11-20
題目描述:
實現一個二叉搜尋樹迭代器。你將使用二叉搜尋樹的根節點初始化迭代器。
呼叫 next()
將返回二叉搜尋樹中的下一個最小的數。
注意: next()
和hasNext()
操作的時間複雜度是O(1),並使用 O(h) 記憶體,其中 h 是樹的高度。
AC C++ Solution:
/** * 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<TreeNode *> stk; BSTIterator(TreeNode *root) { //建構函式:把所有左節點壓入棧 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 *pop = stk.top(); stk.pop(); int res = pop->val; if(pop->right) { TreeNode *root = pop->right; while(root) { stk.push(root); root = root->left; } } return res; } }; /** * Your BSTIterator will be called like this: * BSTIterator i = BSTIterator(root); * while (i.hasNext()) cout << i.next(); */