首页 > 其他分享 >二叉搜索树迭代器

二叉搜索树迭代器

时间:2023-06-15 14:34:45浏览次数:20  
标签:返回 bSTIterator hasNext cur 迭代 BSTIterator next 搜索 二叉


二叉搜索树迭代器

题目:
实现一个二叉搜索树迭代器类BSTIterator ,表示一个按中序遍历二叉搜索树(BST)的迭代器:
BSTIterator(TreeNode root) 初始化 BSTIterator 类的一个对象。BST 的根节点 root 会作为构造函数的一部分给出。指针应初始化为一个不存在于 BST 中的数字,且该数字小于 BST 中的任何元素。
boolean hasNext() 如果向指针右侧遍历存在数字,则返回 true ;否则返回 false 。
int next()将指针向右移动,然后返回指针处的数字。
注意,指针初始化为一个不存在于 BST 中的数字,所以对 next() 的首次调用将返回 BST 中的最小元素。

你可以假设 next() 调用总是有效的,也就是说,当调用 next() 时,BST 的中序遍历中至少存在一个下一个数字。

 

示例:

二叉搜索树迭代器_迭代器

输入
["BSTIterator", "next", "next", "hasNext", "next", "hasNext", "next", "hasNext", "next", "hasNext"]
[[[7, 3, 15, null, null, 9, 20]], [], [], [], [], [], [], [], [], []]
输出
[null, 3, 7, true, 9, true, 15, true, 20, false]

解释
BSTIterator bSTIterator = new BSTIterator([7, 3, 15, null, null, 9, 20]);
bSTIterator.next();    // 返回 3
bSTIterator.next();    // 返回 7
bSTIterator.hasNext(); // 返回 True
bSTIterator.next();    // 返回 9
bSTIterator.hasNext(); // 返回 True
bSTIterator.next();    // 返回 15
bSTIterator.hasNext(); // 返回 True
bSTIterator.next();    // 返回 20
bSTIterator.hasNext(); // 返回 False

解题思路:用一个节点记录当前已经遍历到的节点后,再根据中序遍历的规则依次返回即可

class BSTIterator {
    private TreeNode cur;
    private Stack<TreeNode> stack;

    public BSTIterator(TreeNode root) {
        cur = root;
        stack = new Stack();
    }
    
    public int next() {
        while (cur != null) {
            stack.push(cur);
            cur = cur.left;
        }
        cur = stack.pop();
        int ret = cur.val;
        cur = cur.right;
        return ret;
    }
    
    public boolean hasNext() {
        return cur != null || !stack.isEmpty();
    }
}


标签:返回,bSTIterator,hasNext,cur,迭代,BSTIterator,next,搜索,二叉
From: https://blog.51cto.com/u_14813899/6487220

相关文章

  • 搜索二维矩阵(二)
    搜索二维矩阵(二)题目:描述写出一个高效的算法来搜索m×n矩阵中的值,返回这个值出现的次数。这个矩阵具有以下特性:每行中的整数从左到右是排序的。每一列的整数从上到下是排序的。在每一行或每一列中没有重复的整数。样例样例1:输入:矩阵=[[3,4]]target=3输出:1解释:矩阵......
  • 合并二叉树
    合并二叉树题目:给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为NULL的节点将直接作为新二叉树的节点。示例1:输入:输......
  • 二叉树的直径
    二叉树的直径题目:给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。示例:给定二叉树返回3,它的长度是路径[4,2,1,3]或者[5,2,1,3]。注意:两结点之间的路径长度是以它们之间边的数目表......
  • 谷歌百度一键搜索
    谷歌百度一键搜索在Baidu里面搜Google,在Google里面搜百度!不用切换,松松搞定~~有图有真相:安装地址:http://t.cn/zWUv7wX安装地址:http://t.cn/zWUv7wX源码地址:https://github.com/raywill/BaiGoogleDu......
  • 2023小红书web端搜索采集笔记视频点赞关注评论去水印接口源码nodejs
    文章标签:前端笔记java版权声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢!一、notejs接口调用方法(源码级别):获取笔记信息helpnow_get_note_by_id("笔记ID")获取当前用户信息helpnow_self_info()获取用户信息helpnow_user_info("用户ID")获取主页推......
  • 关键字搜索aliexpress商品API,速卖通API接口返回值说明
    Aliexpress提供了开放平台(OpenAPI),可以通过该平台访问其商品数据。您可以使用开放平台提供的查询接口来实现关键字搜索。具体实现方式如下:注册并登录开放平台账号。创建应用并获取AppKey和AppSecret。选择接口签名方式(HMAC-SHA1或MD5)。使用获取到的AppKey、AppSecret、签......
  • Qt编写精美输入法(历时十年迭代/可换肤/支持Qt4/5/6/win/linux/mac/嵌入式等)
    一、前言大概是从2012年就开始研究用Qt写输入法,因为项目需要,嵌入式板子上,没有对应的输入法,当初使用过很多NVR,里面也是鼠标按下弹出输入法面板进行输入,可以切换数字和字母及中文,于是借鉴着操作交互流程,用纯QWidget代码实现一个,当然最初的版本是非常简单和丑陋的,而且功能单一,能打字......
  • 哈希搜索算法及C语言实现
    一、哈希搜索算法原理哈希搜索,也叫散列查找,是一种通过哈希表(散列表)实现快速查找目标元素的算法。哈希搜索算法通常适用于需要快速查找一组数据中是否存在某个元素的场景,其时间复杂度最高为O(1),而平均情况下的时间复杂度通常相当接近O(1),因此在实际应用中具有很高的效率和性能。哈......
  • 2023-06-14:我们从二叉树的根节点 root 开始进行深度优先搜索。 在遍历中的每个节点处,
    2023-06-14:我们从二叉树的根节点root开始进行深度优先搜索。在遍历中的每个节点处,我们输出D条短划线(其中D是该节点的深度)然后输出该节点的值。(如果节点的深度为D,则其直接子节点的深度为D+1根节点的深度为0如果节点只有一个子节点,那么保证该子节点为左子节点给出遍......
  • 2023-06-14:我们从二叉树的根节点 root 开始进行深度优先搜索。 在遍历中的每个节点处,
    2023-06-14:我们从二叉树的根节点root开始进行深度优先搜索。在遍历中的每个节点处,我们输出D条短划线(其中D是该节点的深度)然后输出该节点的值。(如果节点的深度为D,则其直接子节点的深度为D+1根节点的深度为0如果节点只有一个子节点,那么保证该子节点为左子节点给出遍历输出......