LintCode领扣 题解丨谷歌秋招原题:二叉查找树迭代器

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: LintCode领扣 题解丨谷歌秋招原题:二叉查找树迭代器

设计实现一个带有下列属性的二叉查找树的迭代器:

next()返回BST中下一个最小的元素

元素按照递增的顺序被访问(比如中序遍历)
next()和hasNext()的询问操作要求均摊时间复杂度是O(1)
在线评测地址:LintCode 领扣

样例 1:

输入:{10,1,11,#,6,#,12}
输出:[1, 6, 10, 11, 12]
解释:
二叉查找树如下 :
10
/\
1 11
\
6 12
可以返回二叉查找树的中序遍历 [1, 6, 10, 11, 12]
样例 2:

输入:{2,1,3}
输出:[1,2,3]
解释:
二叉查找树如下 :
2
/ \
1 3
可以返回二叉查找树的中序遍历 [1,2,3]
【题解】

这是一个非常通用的利用 stack 进行 Binary Tree Iterator 的写法。

stack 中保存一路走到当前节点的所有节点,stack.peek() 一直指向 iterator 指向的当前节点。 因此判断有没有下一个,只需要判断 stack 是否为空 获得下一个值,只需要返回 stack.peek() 的值,并将 stack 进行相应的变化,挪到下一个点。

挪到下一个点的算法如下:

如果当前点存在右子树,那么就是右子树中“一路向西”最左边的那个点
如果当前点不存在右子树,则是走到当前点的路径中,第一个左拐的点
访问所有节点用时O(n),所以均摊下来访问每个节点的时间复杂度时O(1)

public class BSTIterator {

private Stack<TreeNode> stack = new Stack<>();

// @param root: The root of binary tree.
public BSTIterator(TreeNode root) {
    while (root != null) {
        stack.push(root);
        root = root.left;
    }
}

//@return: True if there has next node, or false
public boolean hasNext() {
    return !stack.isEmpty();
}

//@return: return next node
public TreeNode next() {
    TreeNode curt = stack.peek();
    TreeNode node = curt;
    
    // move to the next node
    if (node.right == null) {
        node = stack.pop();
        while (!stack.isEmpty() && stack.peek().right == node) {
            node = stack.pop();
        }
    } else {
        node = node.right;
        while (node != null) {
            stack.push(node);
            node = node.left;
        }
    }
    
    return curt;
}

}
更多题解参考:九章算法官网

相关文章
|
监控 网络协议 Java
Linux 网络编程从入门到进阶 学习指南
在上一篇文章中,我们探讨了 Linux 系统编程的诸多基础构件,包括文件操作、进程管理和线程同步等,接下来,我们将视野扩展到网络世界。在这个新篇章里,我们要让应用跳出单机限制,学会在网络上跨机器交流信息。
Linux 网络编程从入门到进阶 学习指南
|
存储 安全 关系型数据库
【Linux】CentOS-6.8超详细安装教程
【Linux】CentOS-6.8超详细安装教程
954 1
|
安全 网络协议 Linux
家庭实验室系列文章 - 电脑如何配置网络唤醒 (WOL)?
家庭实验室系列文章 - 电脑如何配置网络唤醒 (WOL)?
|
3月前
|
人工智能 编解码 API
AI视频生成低至0.9元/秒!阿里云HappyHorse开启灰度测试,150亿参数AI视频模型
阿里云HappyHorse(快乐小马)是阿里巴巴ATH创新事业部研发的150亿参数原生多模态AI视频大模型,全球首个实现音画联合生成的单流架构模型,4月登顶Artificial Analysis双榜。支持文/图生视频、1080P输出、7语种口型同步,最低0.44元/秒,已通过百炼平台、官网及千问App开放灰度测试。
|
5月前
|
人工智能 运维 API
2026年阿里云无影云电脑+本地部署OpenClaw(Clawdbot)+Skills集成小白喂饭级教程
2026年,AI自动化工具迎来全民普及,OpenClaw(原Clawdbot、Moltbot)凭借“零代码入门、全场景适配、轻量化运维”的核心优势,成为小白用户搭建专属AI助手的首选。而阿里云无影云电脑的专属一键部署方案,更是彻底打破了传统部署的技术壁垒,无需手动配置环境、编写复杂命令,依托云端算力实现7×24小时稳定运行,搭配本地部署的灵活便捷,再加上丰富的Skills生态插件,让小白也能轻松解锁“自然语言指令驱动全流程自动化”的强大能力。
1005 19
|
7月前
|
存储 安全 API
07-nexus搭建docker私仓
本文介绍如何使用Nexus搭建Docker私有仓库,包括启用Docker Realm、创建Blob存储、配置docker-hosted仓库及端口设置。同时涵盖客户端镜像的导出导入、配置HTTP不安全仓库、登录认证、镜像打标与推送等完整流程,实现企业内网镜像的安全管理与分发。
222 1
|
7月前
|
人工智能 自然语言处理 运维
解锁2025企业选型难题:十大智能客服品牌实测榜单与权威解读
智能客服市场进入“主动服务+生态协同”成熟期,企业选型面临同质化、适配难等挑战。本文基于技术实力、场景落地与未来潜力,发布2025年十大品牌实测榜单,涵盖瓴羊、智齿、轻简AI、科大讯飞等主流厂商,从核心技术、行业适配到成本效益全面解析,助力企业精准匹配需求,实现服务升级与效率跃迁。
|
机器学习/深度学习 人工智能 数据可视化
鱼类AI数量检测代码分享
本代码基于深度学习实现鱼类数量检测,使用预训练的 Faster R-CNN 模型识别图像中的鱼类,并用边界框标注位置。支持单张图片检测、文件夹批量检测、结果可视化及统计分析。需安装 PyTorch、OpenCV 等依赖库。可微调模型提升鱼类检测精度。
499 0
|
数据采集 机器学习/深度学习 算法
数据清洗过程中,如何确定哪些数据是异常
数据清洗过程中,如何确定哪些数据是异常
|
Linux 数据处理 数据库
深入解析Linux命令id:理解用户身份与权限
`id`命令在Linux中用于显示用户身份(UID, GID和附加组)。它查看系统用户数据库获取信息。参数如`-u`显示UID,`-g`显示GID,`-G`显示附加组,结合`-n`显示名称而非ID。用于确认命令执行者身份,确保权限正确。在脚本中使用时注意权限管理,遵循最小权限原则。