牛客 二叉树 NB1 牛群的最大高度

ops/2024/10/18 0:21:42/

原题链接

就不采用, 递归的方式来做了, 自己弄个栈来做
用栈来保存路径, curr 表示当前的节点, pre 保留往回走时的上一步

如果是 用递归来做 它的栈链路是这样的, 可以做下参考
在这里插入图片描述

黄色表示返回

用栈模拟的话, 不可能模拟得一摸一样, 递归的话一个栈会经过3次, 第三次后就不会再碰到这个栈了, 可以和它拜拜了,
换做模拟来说, 只要是第3次使用该栈节点, 就可以把这个节点给弹出了

curr 的 遍历 策略
一路向左走, 触底了, curr == null 了, 就要往回走了, 就看栈顶节点的右边有没有, 右边有且触底不是从右边上来的, 就往右走

往右走后还是一样的策略, 触底一路返回, 拿到栈顶元素, 发现是从右边上来的(即第栈顶节点被第三次使用), 把栈顶节点弹出, 继续返回, 直到栈为空为止

把怎么遍历二叉树弄明白后, 咱们只需要简简单单在前序遍历的位置完成最大值的测试及更新即可

java">public class Solution {public int findMaxHeight (TreeNode root) {int max = 0;TreeNode pre = null;TreeNode curr = root;Stack<TreeNode> stack = new Stack<>();while(curr != null || !stack.isEmpty()) {if(curr != null) {stack.push(curr); // 第一次使用max = Math.max(max, curr.val); curr = curr.left;} else {TreeNode parent = stack.peek();if(parent.right == null || pre == parent.right) { // 第三次使用pre = stack.pop();// 保留返回时的上一步的记录, 用来做第几次使用的测试} else { // 第二次使用curr = parent.right;}}}return max;}
}

具体代码参上

好的!本次分享到这就结束了
如果对铁汁你有帮助的话,记得点赞👍+收藏⭐️+关注➕
我在这先行拜谢了:)


http://www.ppmy.cn/ops/38017.html

相关文章

STM32学习计划

前言&#xff1a; 这里先记录下STM32的学习计划。 2024/05/08 今天我正在学习的是正点原子的I.MX6ULL APLHA/Mini 开发板的 Linux 之ARM裸机第二期开发的视频教程&#xff0c;会用正点原子的I.MX6ULL开发板学习第二期ARM裸机开发的教程&#xff0c;然后是学习完正点原子的I.M…

SpringCloud中LoadBalancer负载均衡器配置

SpringCloud中LoadBalancer负载均衡器配置 依赖 <dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><g…

信息系统架构_1.架构风格

1.信息系统架构风格 信息系统架构设计的一个核心问题是能否使用重复的信息系统架构模式&#xff0c;即能否达到架构级别的软件重用。也就是说&#xff0c;能否在不同的软件系统中&#xff0c;使用同一架构。 信息系统架构风格是描述某一特定应用领域中系统组织方式的惯用模式。…

QT设计模式:工厂模式

基本概念 工厂模式是一种创建型设计模式&#xff0c;用于将对象的创建逻辑与使用者分离&#xff0c;以实现对象的创建和使用的解耦。工厂模式提供了一个统一的接口来创建对象&#xff0c;而客户端代码只需通过该接口来请求所需的对象&#xff0c;而不需要知道具体的对象创建细…

【完美解决】使用git时候出现error setting certificate verify locations: CAfile:问题

1、出现场景&#xff1a; 在使用idea的时候&#xff0c;进行git下的push&#xff0c;出现下面的错误&#xff1a; 2、原因分析&#xff1a; 可能因为重装过系统&#xff0c;或者是安装git的位置发生了变化等情况出现。 3、解决方案&#xff1a; 找到git的安装路径&#xf…

uni-app 从vue3项目创建到Pinia管理数据全局使用 持久化存储数据 详细教程

一、创建uni-app项目 1. 安装HBuilder X&#xff0c;下载地址&#xff1a;https://www.dcloud.io/hbuilderx.html 2. 打开HBuilder X&#xff0c;点击左上角的“文件”->“新建”->“项目”&#xff0c;选择“uni-app”项目模板&#xff0c;填写项目名称和项目路径&…

配电室智能巡检机器人

近年来&#xff0c;生产过程高度自动化&#xff0c;各工矿企业关键场所需定期巡检维护。但目前巡检主要靠人工&#xff0c;既耗时费力效率又低&#xff0c;且受环境等因素影响&#xff0c;巡检难以全面规范&#xff0c;隐患或问题易被忽视。在此情况下&#xff0c;如何利用现有…

(类)偏特化Partial Specialization

当编写一个模板特化&#xff0c;涉及部分但不是全部模板参数时&#xff0c;它被称为偏特化&#xff08;Partial Specialization&#xff09;。【注意&#xff0c;偏特化是针对类模板而言&#xff0c;函数模板不可偏特化&#xff0c;只能全特化】 偏特化是C模板编程中的一种技术…