面试手撕——迭代法中序遍历二叉树

思路

访问顺序和处理顺序不一致导致迭代法难写,体现在总要先遍历根节点,才能访问左右孩子,用null标记,null标记的节点表示已经访问过了,下一次可以处理,所以在当前栈顶节点不是null的时候,都要进行入栈,由于是左根右的处理顺序,所以压栈的时候要右根左压栈。

代码

import java.util.Stack;public class InOrderTraversalBinaryTree {static class TreeNode{int val;TreeNode left;TreeNode right;TreeNode(int v){this.val = v;this.left = null;this.right = null;}}static void InOrderTra(TreeNode root){if(root == null) return;if(root.left != null) InOrderTra(root.left);System.out.println(root.val);if(root.right != null) InOrderTra(root.right);}public static void main(String[] args) {TreeNode root = new TreeNode(7);TreeNode left = new TreeNode(3);TreeNode right = new TreeNode(10);root.left = left;root.right = right;
//      递归法
//        InOrderTra(root);Stack<TreeNode> st = new Stack<>();if(root != null)st.push(root);while(!st.isEmpty()){TreeNode node = st.peek();if(node != null){st.pop();if(node.right != null) st.push(node.right);st.push(node);st.push(null);if(node.left != null) st.push(node.left);}else{st.pop();node = st.peek();st.pop();System.out.println(node.val);}}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/81277.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AD系列:Windows Server 2025 安装AD CS角色和颁发证书

什么是 Active Directory 证书服务&#xff1f; Active Directory 证书服务 (AD CS) 是一个 Windows Server 角色&#xff0c;负责颁发和管理在安全通信和身份验证协议中使用的公钥基础结构 (PKI) 证书。 颁发和管理证书 数字证书可用于对电子文档和消息进行加密和数字签名&…

kubernetes》》k8s》》Service 、Ingress 区别

K8S>>Service 资料 K8S >>Ingress 资料 Ingress VS Service 物理层数据链路层网络层传输层会话层表示层应用层 Ingress是一种用于暴露HTTP和HTTPS路由的资源&#xff0c;它提供了七层&#xff08;应用层&#xff09;的负载均衡功能。Ingress可以根据主机名、…

【java WEB】恢复补充说明

Server 出现javax.servlet.http.HttpServlet", according to the project’s Dynamic Web Module facet version (3.0), was not found on the Java Build Path. 右键项目 > Properties > Project Facets。Dynamic Web Module facet version选4.0即可 还需要在serv…

VMware 创建虚拟机+简易安装Ubuntu的详细操作步骤

VMware 创建虚拟机安装Ubuntu的详细操作步骤 一、创建虚拟机1.1 点击创建新的虚拟机1.2 选择自定义创建虚拟机1.3 选择虚拟机的硬件兼容性1.4 安装客户机操作系统1.5 简易安装信息1.6 命名虚拟机名称1.7 处理器配置1.8 虚拟机内核选择1.9 网络类型1.9 选择I/O 控制器类型1.10 选…

GCC-C语言“自定义段”

一、起因 事情的起因是这样的,在看别人代码时,发现了一种很有意思的写法,因为本人主要是以应用层开发为主,所以对这种写法还是比较少见的,所以研究了一下,就牵扯出了一些知识点,这里先卖个关子,继续往下看。 二、经过 发现了一串这样的代码 static void do_mac(mcmd_…

【信息系统项目管理师-论文真题】2021上半年论文详解(包括解题思路和写作要点)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 试题1:论信息系统项目的合同管理1、写作要点2、解题思路项目合同管理的过程项目合同主要的条款内容试题2:论信息系统项目的范围管理1、写作要点2、解题思路项目范围管理的过程核心范围对应的需求跟踪矩阵项目…

python2反编译部分

文章目录 1、所需环境2、确认打包工具&#xff08;没成功&#xff09;3、 解包.exe文件&#xff08;以PyInstaller为例&#xff09; - useful【***总的来说这一步对我有用】4、定位关键文件 - useful5、 修复.pyc文件头&#xff08;关键步骤&#xff01;&#xff09;- maybe-ig…

基于STM32的中点圆算法,画空心圆的函数

中点圆算法(Midpoint Circle Algorithm)是一种高效绘制圆的算法&#xff0c;它利用圆的对称性和整数运算来避免浮点计算&#xff0c;非常适合嵌入式系统使用。 空心圆绘制函数实现 /*** brief 使用中点圆算法绘制空心圆* param x0: 圆心x坐标* param y0: 圆心y坐标* param…

Android Kotlin 项目完整集成 Bugly 异常监控指南

Android Kotlin 项目集成 Bugly 异常监控完整指南 一、Bugly 简介 Bugly 是腾讯提供的专业移动应用异常监控平台&#xff0c;支持&#xff1a; 崩溃报告&#xff08;Java/Native&#xff09;错误分析性能监控热更新功能&#xff08;需额外配置&#xff09; 二、集成步骤 1…

【电脑维修】MERCURY水星无线网卡导致 Windows 网络适配器无法连接的一种情况

故障现象 Powershell 无法启动&#xff0c; Terminal 无法启动&#xff0c; CMD 无法启动。 操作1 重新拔插 MERCURY 无线USB网卡&#xff0c;上述各种终端恢复相应。 分析 应该是MERCURY驱动故障导致卡死 操作2 磁盘出现 MERCURY 盘。里面是一个 MERCURY.exe 驱动安装程…

Docker 打上 Tag 和 Push 的意思

在 Docker 中&#xff0c;打 Tag&#xff08;Tagging&#xff09; 和 Push&#xff08;Pushing&#xff09; 是两个关键操作&#xff0c;用于管理镜像的版本并上传到镜像仓库&#xff08;如 Docker Hub、阿里云 ACR、Harbor 等&#xff09;。 1. 打 Tag&#xff08;Tagging&…

简化excel校验提高开发效率

业务背景&#xff1a;上传excel文件进行基础数据校验&#xff0c;然而东西太多写着写着就...自然成了测试的KPI了 解决思路&#xff1a;使用现有的注解处理&#xff0c;原理使用validate注解原理 直接上干货&#xff0c;一行代码搞定校验&#xff1a; ValidateUtils.validat…

基于Koa实现的服务端渲染 ✅

前段时间刚写完毕业论文&#xff0c;现在一上来就是“基于”&#xff0c;哈哈。&#x1f92f; 这篇文章持续更新&#xff0c;涉及到的技术栈是Koa、Vue和Vite &#xff08;用React手搓服务端渲染好麻烦&#xff09;。但是现在能上生产的服务端渲染估计是Next&#xff08;配合Re…

Linux运维——Vim基础

Vim基础 一、移动光标1.1、基础移动1.2、屏幕滚动 二、编辑操作2.1、插入模式2.2、删除与修改2.3、复制粘贴 三、搜索与替换3.1、搜索3.2、替换 4、分屏与窗口管理4.1、分屏操作4.2、窗口调整 五、宏与批量操作六、效率技巧七、操作符7.1、内置操作符7.2、操作符 文本对象&…

git操作合集

更新文件 在 Git 中更新已经上传到仓库的文件 1、检查当前状态 首先&#xff0c;打开终端或命令行工具&#xff0c;进入你的 Git 仓库目录&#xff08;即包含 .git 文件夹的目录&#xff09;。运行以下命令来查看当前仓库的状态&#xff1a; git status 此命令会显示哪些文…

【笔记】深度学习模型训练的 GPU 内存优化之旅⑤:内存分配篇

开设此专题&#xff0c;目的一是梳理文献&#xff0c;目的二是分享知识。因为笔者读研期间的研究方向是单卡上的显存优化&#xff0c;所以最初思考的专题名称是“显存突围&#xff1a;深度学习模型训练的 GPU 内存优化之旅”&#xff0c;英文缩写是 “MLSys_GPU_Memory_Opt”。…

SQL Server 存储过程开发手册

SQL Server 存储过程开发手册&#xff08;更新版&#xff09; 根据要求&#xff0c;重新整理并加入了事务控制、异常日志记录和返回状态码的设计。以下是详细说明&#xff1a; 1. 总则 1.1 目标 本手册旨在为 SQL Server 存储过程的编写提供一套完整的规范&#xff0c;确保系…

深海科技服务博客简介

人人可学&#xff0c;人人可用&#xff0c;IT与AI不是高不可攀&#xff01; 博客宗旨 深海科技服务博客致力于&#xff1a; 推广IT与AI的实际应用&#xff0c;降低入门门槛&#xff0c;让更多个人和中小企业能够以最少投入、高效实现信息化、智能化。 分享开源免费软件、简单…

本地大模型编程实战(29)查询图数据库NEO4J(2)

上一篇文章 用大语言模型LLM查询图数据库NEO4J(1) 介绍了使用GraphQACypherChain查询NEO4J。用它实现简单快捷&#xff0c;但是不容易定制&#xff0c;在生产环境中可能会面临挑战。 本文将基于langgraph 框架&#xff0c;用LLM(大语言模型)查询图数据库NEO4J。它可以定义清晰复…

RPG_5.角色动画

1.创建一个动画实例 2.创建该实例的c子类 3.继续创建该类的子类&#xff0c;但是作用是用来链接&#xff08;以后会详细解释&#xff09; 4.基于PlayerAnimInstance类创建一个子类 5.目前一共创建了四个c类&#xff0c; 最基的类 角色的类 玩家控制的角色的类 玩家控制的角…