【LeetCode】173. 二叉搜尋樹迭代器 結題報告 (C++)
阿新 • • 發佈:2018-11-11
原題地址:https://leetcode-cn.com/problems/binary-search-tree-iterator/description/
題目描述:
實現一個二叉搜尋樹迭代器。你將使用二叉搜尋樹的根節點初始化迭代器。
呼叫 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) { TreeNode *cur = root; while(cur){ st.push(cur); cur = cur->left; } } /** @return whether we have a next smallest number */ bool hasNext() { return !st.empty(); } /** @return the next smallest number */ int next() { TreeNode *next = st.top(); TreeNode *cur = next->right; st.pop(); while(cur){ st.push(cur); cur = cur->left; } return next->val; } private: stack<TreeNode *> st; }; /** * Your BSTIterator will be called like this: * BSTIterator i = BSTIterator(root); * while (i.hasNext()) cout << i.next(); */