|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 这是她 于 2020-5-31 21:57 编辑
二叉搜索树迭代器
题目:
- 实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。
- 调用 next() 将返回二叉搜索树中的下一个最小的数。
复制代码
示例:
- BSTIterator iterator = new BSTIterator(root);
- iterator.next(); // 返回 3
- iterator.next(); // 返回 7
- iterator.hasNext(); // 返回 true
- iterator.next(); // 返回 9
- iterator.hasNext(); // 返回 true
- iterator.next(); // 返回 15
- iterator.hasNext(); // 返回 true
- iterator.next(); // 返回 20
- iterator.hasNext(); // 返回 false
复制代码 提示:
- 1、next() 和 hasNext() 操作的时间复杂度是 O(1),并使用 O(h) 内存,其中 h 是树的高度。
- 2、你可以假设 next() 调用总是有效的,也就是说,当调用 next() 时,BST 中至少存在一个下一个最小的数。
复制代码
代码:
- //模拟中序遍历->寻找最小值
- class BSTIterator {
- private:
- vector<TreeNode*>vec;
- public:
- BSTIterator(TreeNode* root) {
- //遍历左孩子——直到为空
- while(root){
- //插入一个新元素
- vec.push_back(root);
- //左孩子遍历
- root=root->left;
- }
- }
-
- //返回最小的值
- int next() {
- //返回数组最后一个元素
- TreeNode* p=vec.back();
- //删除数组最后一个元素
- vec.pop_back();
- //将P的值->先保存
- int ans=p->val;
- //右孩子
- p=p->right;
- //右孩子遍历->直到为空
- while(p){
- //将p插入到数组中
- vec.push_back(p);
- //p->左孩子
- p=p->left;
- }
- return ans;
- }
-
- //判断数组的长度
- bool hasNext() {
- return vec.size()>0;
- }
- };
复制代码
https://leetcode-cn.com/problems ... dai-qi-by-leetcode/
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-search-tree-iterator
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
|
|