算法:Java构建二叉树并迭代实现二叉树的前序、中序、后序遍历
先自定义一下二叉树的类:
// Definition for a binary tree node.
public class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val = val; }TreeNode(int val, TreeNode left, TreeNode right) {this.val = val;this.left = left;this.right = right;}
}
一个代码里面同时实现二叉树的前序、中序、后序遍历:
以该二叉树为例
import java.util.ArrayList;
import java.util.Deque;
import java.util.LinkedList;
import java.util.List;class preorderTraversalSolution {public static void main(String[] args) {TreeNode root = new TreeNode(1);root.left = new TreeNode(2);root.right = new TreeNode(3);root.left.left = new TreeNode(4);root.left.right = new TreeNode(5);root.right.right = new TreeNode(6);Solution sol = new Solution();// 前序、中序、后序System.out.println(sol.preorderTraversal(root).toString()); //[1, 2, 4, 5, 3, 6]System.out.println(sol.inorderTraversal(root).toString()); //[4, 2, 5, 1, 3, 6]System.out.println(sol.postorderTraversal(root).toString()); //[4, 5, 2, 6, 3, 1]}
}class Solution {//前序遍历public List<Integer> preorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<Integer>();if (root == null) {return res;}Deque<TreeNode> stack = new LinkedList<TreeNode>();TreeNode node = root;while(!stack.isEmpty() || node != null){while (node != null) {res.add(node.val); //相比中序遍历,只有这行代码换了位置stack.push(node);node = node.left;}node = stack.pop();node = node.right;}return res;}//中序遍历public List<Integer> inorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<Integer>();if (root == null) {return res;}Deque<TreeNode> stack = new LinkedList<TreeNode>();TreeNode node = root;while(!stack.isEmpty() || node != null){while (node != null) {stack.push(node);node = node.left;}node = stack.pop();res.add(node.val); //相比前序遍历,只有这行代码换了位置node = node.right;}return res;}//后序遍历public List<Integer> postorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<Integer>();if (root == null) {return res;}Deque<TreeNode> stack = new LinkedList<TreeNode>();TreeNode node = root;TreeNode pre = null;while(!stack.isEmpty() || node != null){while (node != null) {stack.push(node);node = node.left;}node = stack.pop();if (node.right == null || node.right == pre) {//如果不存在右子树,则输出该节点的值//如果该节点的右结点刚刚遍历过了,则也应该输出该节点的值res.add(node.val);pre = node;node = null;}else{//如果存在右子树,则重新放回栈中,因为它的值要在右子树遍历完之后添加stack.push(node);node = node.right;}}return res;}
}
三种遍历方式的Java递归实现在这里:算法:Java构建二叉树并递归实现二叉树的前序、中序、后序遍历-CSDN博客
相关文章:

算法:Java构建二叉树并迭代实现二叉树的前序、中序、后序遍历
先自定义一下二叉树的类: // Definition for a binary tree node. public class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val val; }TreeNode(int val, TreeNode left, TreeNode right) {this.val val;this.left…...

大数据毕业设计选题推荐-旅游景点游客数据分析-Hadoop-Spark-Hive
✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…...

单片机,0.06
...

[PyTorch][chapter 59][强化学习-2-有模型学习]
前言: 在已知模型的环境里面学习,称为有模型学习(model-based learning). 此刻,下列参数是已知的: : 在状态x 下面,执行动作a ,转移到状态 的概率 : 在状态x 下面,执行动作a ,转移到 的奖赏 有模型强化学习的应用案例 …...

【接口测试】HTTP接口详细验证清单
概述 当我们在构建、测试、发布一套新的HTTP API时,包括我在内的大多数人都不知道他们所构建的每一个组件的复杂性和细微差别。 即使你对每一个组件都有深刻的理解,也可能会有太多的信息在你的脑海中出现。 以至于我们不可能一下把所有的信息进行梳理…...

ALLRGRO拼板的问题。
1、建议拼板还是用AUTO CAD或者CAM350会比较方便。 2、如果要在allegro中拼板,就拼个外框Outline,然后让板厂的人按照板框帮你放。板厂都会帮你操作的。也不会影响贴片。 3、如果非要死乞白赖的在PCB板子里面拼板,请看文章最后面。 具体的…...

YOLO算法改进6【中阶改进篇】:depthwise separable convolution轻量化C3
常规卷积操作 对于一张55像素、三通道(shape为553),经过33卷积核的卷积层(假设输出通道数为4,则卷积核shape为3334,最终输出4个Feature Map,如果有same padding则尺寸与输入层相同(…...

自定义类型枚举
目录 枚举类型枚举类型的声明扩展枚举类型的优点枚举的优点 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 🐒🐒🐒 个人主页 🥸🥸🥸 C语言 🐿️🐿️🐿…...

PHP foreach 循环跳过本次循环
$a [[id>1],[id>2],[id>3],[id>4],[id>5],[id>6],[id>7],[id>18],];foreach($a as $v){if($v[id] 5){continue;}$b[] $v[id];}return show_data(,$b); 结果:...

lua-web-utils库
lua--导入所需的库local web_utilsrequire("lua-web-utils")--定义要下载的URLlocal url"https://jshk.com.cn/"--定义代理服务器的主机名和端口号local proxy_port8000--使用web_utils的download函数下载URLlocal file_pathweb_utils.download(url,proxy_…...

大数据毕业设计选题推荐-热门旅游景点数据分析-Hadoop-Spark-Hive
✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...

Oracle-执行计划
执行计划生成的几种方式 1. EXPLAIN FOR 语法: EXPLAIN PLAN FOR SQL语句SELECT * FROM TABLE(dbms_xplan.display());优点: 无需真正执行SQL 缺点: 没有输出相关的统计信息,例如产生了多少逻辑读、物理读、递归调用等情况无法判…...

Pytho入门教程之Python运行的三种方式
文章目录 一、交互式编程二、脚本式编程三、方式三关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 一、交互式编…...
如何修改docker容器中的MySQL数据库的密码?
查看容器中MySQL的ID:docker ps | grep mysql进入容器:docker exec -it {容器ID} /bin/bash调整MySQL配置文件,设置跳过权限控制:echo "skip-grant-tables" >> /etc/mysql/conf.d/docker.cnf 警 告:这…...

JOSEF约瑟 数显三相电压继电器 HJY-931A/D 导轨安装
名称:数字交流三相电压继电器型号:HJY-93系列品牌:JOSEF约瑟电压整定范围:10~450VAC额定电压:200、400VAC功率消耗:≤5W HJY系列 数字交流三相电压继电器 系列型号 HJY-931A/D数字式交流三相电压继电器&am…...

第6章_多表查询
文章目录 多表查询概述1 一个案例引发的多表连接1.1 案例说明1.2 笛卡尔积理解演示代码 2 多表查询分类讲解2.1 等值连接 & 非等值连接2.1.1 等值连接2.1.2 非等值连接 自连接 & 非自连接内连接与外连接演示代码 3 SQL99语法实现多表查询3.1 基本语法3.2 内连接&#x…...

吴恩达《机器学习》4-1->4-5:多变量线性回归
一、引入多维特征 在多维特征中,我们考虑的不再是单一的特征,而是一组特征,例如房价模型中可能包括房间数、楼层等多个特征。这些特征将组成一个向量,表示为(𝑥₁, 𝑥₂, . . . , 𝑥ₙ)&#x…...

搜索引擎系统简要分析
目录 一、搜索引擎简单介绍 二、搜索引擎整体架构和工作过程 (一)整体分析 (二)爬虫系统 三个基本点 爬虫系统的工作流程 关键考虑因素和挑战 (三)索引系统 网页处理阶段 预处理阶段 反作弊分析…...

蓝桥杯(C++ 扫雷)
题目: 思想: 1、遍历每个点是否有地雷,有地雷则直接返回为9,无地雷则遍历该点的周围八个点,计数一共有多少个地雷,则返回该数。 代码: #include<iostream> using namespace std; int g[…...
LuatOS-SOC接口文档(air780E)--mobile - 蜂窝网络
示例 -- 简单演示log.info("imei", mobile.imei()) log.info("imsi", mobile.imsi()) local sn mobile.sn() if sn thenlog.info("sn", sn:toHex()) end log.info("muid", mobile.muid()) log.info("iccid", mobile.icc…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...

无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...