Binary Search Tree Iterator问题及解法
来源:互联网 发布:乐福数据 编辑:程序博客网 时间:2024/05/18 19:46
问题描述:
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遍历是根的中序遍历,所以我们这里使用一种数据结构stack,先把root及其之后左节点的left依次入栈,每次判断是否有下一个时只需要判断stack是否为空即可,而next()操作则需要取出栈顶元素root,后将root->right及其之后的左节点的left入栈,返回root->val即可。
过程详见代码:
/** * 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*> st;public: BSTIterator(TreeNode *root) { find_left(root); } /** @return whether we have a next smallest number */ bool hasNext() { if (st.empty()) return false; return true; } /** @return the next smallest number */ int next() { TreeNode* top = st.top(); st.pop(); if (top->right != NULL) find_left(top->right); return top->val; } /** put all the left child() of root */ void find_left(TreeNode* root) { TreeNode* p = root; while (p != NULL) { st.push(p); p = p->left; } }};/** * Your BSTIterator will be called like this: * BSTIterator i = BSTIterator(root); * while (i.hasNext()) cout << i.next(); */
阅读全文
0 0
- Binary Search Tree Iterator问题及解法
- Validate Binary Search Tree问题及解法
- Convert Sorted Array to Binary Search Tree问题及解法
- Find Mode in Binary Search Tree问题及解法
- Convert Sorted List to Binary Search Tree问题及解法
- Trim a Binary Search Tree问题及解法
- Binary Search Tree Iterator
- Binary Search Tree Iterator
- Binary Search Tree Iterator
- Binary Search Tree Iterator
- Binary Search Tree Iterator
- Binary Search Tree Iterator
- Binary Search Tree Iterator
- Binary Search Tree Iterator
- Binary Search Tree Iterator
- Binary Search Tree Iterator
- Binary Search Tree Iterator
- Binary Search Tree Iterator
- maven 内置属性
- 开源 java CMS
- HDU
- POJ-1704 Georgia and Bob (阶梯博弈)
- 安装J2EE的SDK报错:could not find the required version of the Java(TM)2 Runtime Environment in '(null)'的解决
- Binary Search Tree Iterator问题及解法
- 好用的下载器,不止有迅雷哟~
- k-近邻(KNN)算法
- 网易2018校招内推题目记录
- 树-堆结构练习——合并果子之哈夫曼树
- HDU 1030 Delta-wave(找规律)
- UDP打洞原理总结
- hdu 6045 Is Derek lying?
- 算法学习之旅,初级篇(27)-–逆转一个链表