实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。

调用 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

提示:

next() 和 hasNext() 操作的时间复杂度是 O(1),并使用 O(h) 内存,其中 h 是树的高度。
你可以假设 next() 调用总是有效的,也就是说,当调用 next() 时,BST 中至少存在一个下一个最小的数。
本质上是二叉搜索树和栈的应用。二叉搜索树右子树的数一定大于父节点的数,左子树一定小于父节点的数。
代码如下:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class BSTIterator {TreeNode *Top;stack<TreeNode*> s;
public:BSTIterator(TreeNode* root) {Top=root;while(s.size()) s.pop();}/** @return the next smallest number */int next() {int x;while(Top){s.push(Top);Top=Top->left;}Top=s.top();s.pop();x=Top->val;Top=Top->right;  return x;}/** @return whether we have a next smallest number */bool hasNext() {return s.size()||Top!=NULL;}
};/*** Your BSTIterator object will be instantiated and called as such:* BSTIterator* obj = new BSTIterator(root);* int param_1 = obj->next();* bool param_2 = obj->hasNext();*/

努力加油a啊,(o)/~

173. 二叉搜索树迭代器(二叉搜索树+栈)相关推荐

  1. LeetCode 1586. 二叉搜索树迭代器 II(数组+栈)

    文章目录 1. 题目 2. 解题 1. 题目 实现二叉搜索树(BST)的中序遍历迭代器 BSTIterator 类: BSTIterator(TreeNode root) 初始化 BSTIterato ...

  2. 173. 二叉搜索树迭代器/94. 二叉树的中序遍历/145. 二叉树的后序遍历/98. 验证二叉搜索树

    2020-05-12 1.题目描述 二叉搜索树迭代器 2.题解 对于二叉搜索树而言,进行中序遍历就可以得到其有序序列,我们可以先对树进行遍历,将结果保存在 vector中,然后进行计算即可. 3.代码 ...

  3. Java实现 LeetCode 173 二叉搜索树迭代器

    173. 二叉搜索树迭代器 实现一个二叉搜索树迭代器.你将使用二叉搜索树的根节点初始化迭代器. 调用 next() 将返回二叉搜索树中的下一个最小的数. 示例: BSTIterator iterato ...

  4. leetcode 173. 二叉搜索树迭代器

    实现一个二叉搜索树迭代器类BSTIterator ,表示一个按中序遍历二叉搜索树(BST)的迭代器: BSTIterator(TreeNode root) 初始化 BSTIterator 类的一个对象 ...

  5. LeetCode 173. 二叉搜索树迭代器(中序遍历)

    文章目录 1. 题目信息 2. 二叉树中序遍历 1. 题目信息 实现一个二叉搜索树迭代器.你将使用二叉搜索树的根节点初始化迭代器. 调用 next() 将返回二叉搜索树中的下一个最小的数. 示例: B ...

  6. LeetCode 653. 两数之和 IV - 输入 BST(二叉搜索树迭代器双指针)

    文章目录 1. 题目 2. 解题 1. 题目 给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true. 案例 1: 输入: 5/ \3 6/ \ ...

  7. 剑指 Offer II 055. 二叉搜索树迭代器

    链接:剑指 Offer II 055. 二叉搜索树迭代器 题解: /*** Definition for a binary tree node.* struct TreeNode {* int val ...

  8. C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划

    C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划 博文末尾支持二维码赞赏哦 _ github 章3 Stack栈 和 队列Queue= ...

  9. 【数据结构与算法】二叉堆与二叉搜索树的区别

    问题描述 记得刚学习数据结构的时候,就容易混淆二叉堆和二叉搜索树,其实虽说堆也是一种完全二叉树,但二者差别还是挺大的,本文试做分析. 逻辑结构 二叉堆和二叉搜索树都是结点带权重,并在父子结点间满足某种 ...

最新文章

  1. Ubuntu下mysql中文乱码的解决
  2. Spring - Java/J2EE Application Framework 应用框架 第 17 章 使用Spring邮件抽象层发送Email
  3. 程序媛计划——python正则表达式
  4. linux ll 转数组,List、Set、数组之间的转换
  5. Java12题:发奖金问题
  6. yii html 添加下拉框,php – Yii2下拉列表:在我的选项中添加像data-food =“…”这样的html标记...
  7. 浪潮服务器u盘安装系统未找到任何驱动器,u盘重装win10时找不到任何驱动器
  8. [转载] java接口中方法的默认访问修饰符为public
  9. linux强制获得锁,Linux中的两种文件锁——协同锁与强制锁
  10. 升级鸿蒙的具体时间,华为鸿蒙系统升级时间表
  11. 遇到的面试题基础知识
  12. iPhoneSE4完虐国产手机,国产旗舰手机还有啥遮羞布?
  13. Elasticsearch+Kerberos认证
  14. 基于STM32的倾斜仪设计(二)—— 硬件设计(2)
  15. Distantly Supervised Named Entity Recognition using Positive-Unlabeled Learning(DS——NER识别(减少人工参与))
  16. ImportError: DLL load failed while importing _multiarray_umath: 找不到指定的模块(pyinstaller打包的问题)
  17. 【项目管理心得】周总结与反思
  18. 涂鸦智能进击南美取暖器市场
  19. 一种测试FPS的方法
  20. 程序员的520表白代码,你给你对象整过几个?

热门文章

  1. Python—实训day11—Pyecharts绘图
  2. C#中创建文件并追加内容和换行
  3. 整数划分问题的递归算法-c语言,简单的整数划分问题(递归)
  4. 文件包含——概念(一)
  5. css 一行显示_CSS笔记1
  6. Android studio3.0开启抓包功能打包会使apk体积增大好几倍
  7. java打印整个向量_Java中Vector向量的用法
  8. sqlserver循环like变量_numba从入门到精通(6)—numba与循环与并行
  9. web.xml详细介绍
  10. Undefined symbols for architecture i386问题解决方法