当前位置: 首页 > news >正文

Java 二叉树的遍历

二叉树的遍历(traversing binary tree)是指从根结点出发,按照某种次序依次访问二叉树中所有的结点,使得每个结点被访问依次且仅被访问一次。

前序遍历(根 左 右)

先访问根结点,然后前序遍历左子树,再前序遍历右子树

中序遍历(左 根 右)

中序遍历根结点的左子树,然后访问根结点,最后遍历右子树

后序遍历(左 右 根)

从左到右先叶子后结点的方式遍历访问左右子树,最后访问根结点

层级遍历(从上到下 从左到右)

从根结点从上往下从左往右依次遍历

思路

非递归:

前序遍历:从根节点开始,首先将根节点压入栈中,栈不为空进行出栈并打印结点的value数值,然后将该结点的不为空的右结点和左结点依次进行入栈操作重复直到栈为空。

后序遍历:从根节点开始,首先将根节点压入栈中,栈不为空进行出栈并入栈到另一个栈中,然后将该结点的不为空的左结点和右结点依次进行入栈操作重复直到栈为空。然后遍历另一个栈进行出栈并打印结点的值。

中序遍历:从根节点开始将该结点以及它的左边界依次进行入栈,当该结点为null时,然后进行出栈操作,打印出栈结点的value数值,并入栈弹出结点的右结点,然后重复上述步骤,继续入栈该结点的左边界直到为空。。。。

层次遍历:从根节点放入队列,队列不为空的时候进行出队列并打印该结点的value数值,然后依次将该结点的左结点和右结点进行放入队列,一直重复直到队列为空。

代码

Node结点

public class Node<V> {V value;public Node(V value) {this.value = value;}public Node left;public Node right;
}

遍历代码

public class Tree {//递归先序遍历public static void preOrder1(Node head){if(head!=null){System.out.print(head.value+" ");preOrder1(head.left);preOrder1(head.right);}}//先序遍历public static void preOrder(Node head){if(head!=null){Stack<Node> stack=new Stack<>();stack.add(head);//压到栈尾while (!stack.empty()){head=stack.pop();System.out.print(head.value+" ");if(head.right!=null)stack.push(head.right);if(head.left!=null)stack.push(head.left);}}System.out.println();}//后序遍历public static void postOrder(Node head){if(head!=null){Stack<Node> stack1=new Stack<>();Stack<Node> stack2=new Stack<>();stack1.push(head);while (!stack1.empty()){head = stack1.pop();stack2.push(head);if(head.left!=null)stack1.push(head.left);if(head.right!=null)stack1.push(head.right);}while (!stack2.empty()){Node pop = stack2.pop();System.out.print(pop.value+" ");}System.out.println();}}//中序遍历public static void inOrder(Node head){Stack<Node> stack=new Stack<>();while (!stack.empty()||head!=null){if(head!=null){stack.push(head);head=head.left;}else {head=stack.pop();System.out.print(head.value+" ");head=head.right;}}System.out.println();}//层次遍历public static void widthOrder(Node head){if(head!=null){Queue<Node> queue=new LinkedList<>();queue.add(head);while (!queue.isEmpty()){Node poll = queue.poll();System.out.print(poll.value+" ");if(poll.left!=null)queue.add(poll.left);if(poll.right!=null){queue.add(poll.right);}}}System.out.println();}}

相关文章:

Java 二叉树的遍历

二叉树的遍历&#xff08;traversing binary tree&#xff09;是指从根结点出发&#xff0c;按照某种次序依次访问二叉树中所有的结点&#xff0c;使得每个结点被访问依次且仅被访问一次。前序遍历&#xff08;根 左 右&#xff09;先访问根结点&#xff0c;然后前序遍历左子树…...

实习日记-C#

数据类型 字符串常量 string a "hello, world"; // hello, world string b "hello, world"; // hello, world string c "hello \t world"; // hello world string d "hello \t wor…...

Tech Lead如何引导团队成员解决问题?

作为一个开发团队的Tech Lead&#xff0c;当团队成员向你寻求帮助时&#xff0c;你有没有说过下面这些话&#xff1f; 你别管了&#xff0c;我来解决这个问题你只要。。。就行了你先做其他的吧&#xff0c;我研究一下&#xff0c;然后告诉你怎么做 当我们说这些话时&#xff…...

07--组件

一、小程序组件分类微信团队为开发者提供了一系列基础组件&#xff0c;开发者可以通过组合这些基础组件进行快速开发。小程序中的组件也是非常丰富的&#xff0c;开发者可以基于组件快速搭建出漂亮的页面结构。小程序中的组件其实相当于网页中的HTML标签&#xff0c;只不过标签…...

怎么做好一个完整的项目复盘

复盘&#xff0c;是运营必不可少的能力&#xff0c;小到一次买菜的经历&#xff0c;大到百亿千亿的投资项目&#xff0c;都可以通过复盘来总结规律、提升水平。简单说来&#xff0c;复盘可以达到的效果有两条&#xff1a;优化弱项&#xff0c;强化强项明确自己的价值&#xff0…...

浅谈一下mysql8.0与5.7的字符集

修改字符集 修改步骤 在MySQL8.0版本之前&#xff0c;默认字符集为1atin1,utf8字符集指向的是utf8mb3。网站开发人员在数据库设计的时候往往会将编码修改为ut8字符集。如果遗忘修改默认的编码&#xff0c;就会出现乱码的问题。从MySQL8.0开始&#xff0c;数据库的默认编码将改…...

paddle推理部署(cpu)

我没按照官方文档去做&#xff0c;吐槽一下&#xff0c;官方文档有点混乱。。一、概述总结起来&#xff0c;就是用c示例代码&#xff0c;用一个模型做推理。二、示例代码下载https://www.paddlepaddle.org.cn/paddle/paddleinferencehttps://github.com/PaddlePaddle/Paddle-In…...

想开发IM集群?先搞懂什么是RPC!

即时通讯网官方技术群和社区里&#xff0c;经常有开发者在纠结怎么开发IM集群&#xff0c;虽然真正的使用人数&#xff0c;可能用个人电脑单机都能支撑。你也许会说&#xff0c;明明不需要用到IM集群&#xff0c;干吗要自找麻烦&#xff1f;答曰&#xff1a;“老板说这个得有&a…...

案例13-前端对localStorage的使用分析

一&#xff1a;背景介绍 前端在调用后端接口获取某一个人的评论次数、获赞次数、回复次数。调用之后判断后端返回过来的值。如果返回回来的值是0的话&#xff0c;从缓存中获取对应的值&#xff0c;如果从缓存中获取的评论次数为空那么其他两个的次数也为0。 二&#xff1a;思路…...

CNNIC第51次中国互联网络发展状况统计报告用户规模变化发布、解读与白杨SEO看法

一、第51次《中国互联网络发展状况统计报告》发布 3月2日&#xff0c;中国互联网络信息中心&#xff08;简称CNNIC&#xff09;在京发布第51次《中国互联网络发展状况统计报告》。《报告》显示&#xff0c;截至2022年12月&#xff0c;我国网民规模达10.67亿&#xff0c;较2021…...

【数据结构】单链表的实现

本篇主要总结单链表是如何实现的&#xff0c;数据结构是如何管理数据的&#xff0c;详细的介绍每一步是如何实现以及各种注意事项。&#x1f680;1.单链表的实现&#x1f680;&#x1f36d;1.1单链表的尾插&#x1f36d;1.2单链表的头插&#x1f36d;1.3单链表的打印&#x1f3…...

从0到1做产品!产品设计的6个步骤

相信不少产品经理在刚入行时&#xff0c;都遇到过这样的情况&#xff1a; 接到需求后不知所措&#xff0c;然后下意识地照着竞品开始盲目地画原型。 其实&#xff0c;这样的设计过程不仅缺乏逻辑性&#xff0c;在后续阶段也很容易出现各种问题。 在此&#xff0c;跟大家分享一下…...

ESP32遥控器软硬件设计

一. 前言 做智能车 或者 四轴飞控怎么能少得了遥控器呢&#xff01;在这里给大家分享一个简单的基于ESP32遥控器的设计&#xff0c;包括软硬件以及3D外壳。 二. 硬件设计 1. 功能介绍 遥控器嘛&#xff0c;通信方式是最重要的&#xff0c;本设计支持 WIFI、蓝牙 和 2.4G&…...

vue-template-admin的keep-alive缓存与移除缓存

一&#xff0c;场景 A页面是表单页面&#xff0c;填写后需要跳转B页面。如果B页面不操作返回的话&#xff0c;应该能还原A页面的内容&#xff0c;而如果B页面点击提交&#xff0c;再回到A页面的时候&#xff0c;应该清除缓存。 二&#xff0c;实现方法 A页面要缓存数据&…...

【人工智能 AI】机器学习快速入门教程(Google)

目录 机器学习术语 标签 特性 示例 模型 回归与分类 深入了解机器学习&#xff1a;线性回归 深入了解机器学习&#xff1a;训练和损失 平方损失函数&#xff1a;一种常用的损失函数 机器学习术语 预计用时&#xff1a;8 分钟 什么是&#xff08;监督式&#xff…...

适配器模式

概览 适配器模式是一种结构型设计模式&#xff0c;用于将一个类的接口转换为客户端所期望的另一种接口。通常情况下&#xff0c;这种转换是由一个适配器类完成的&#xff0c;适配器类包装了原始类&#xff0c;并实现了客户端所期望的接口。这种模式非常适用于在不修改现有代码…...

00后跨专业学软件测试,斩获8.5K高薪逆袭职场

我想说的第一句&#xff1a;既然有梦想&#xff0c;就应该去拼搏还记得&#xff0c;我大学毕业前&#xff0c;就已经暗下决心到xxx培训机构接受培训。那个时候&#xff0c;没有任何海同公司的人主动找我或者联系过我&#xff0c;我是自己在网上发现了xxxx培训机构的&#xff01…...

数据结构和算法学习

文章目录精通一个领域切题四件套算法算法的五个条件流程图数据结构数据与信息数据信息数据结构和算法数据结构算法时间复杂度空间复杂度数组 Array优点缺点数组和链表的区别时间复杂度链表 Linked List优点缺点时间复杂度单向链表双向链表循环链表双向循环链表堆栈 Stack队列 Q…...

剑指 Offer II 012. 左右两边子数组的和相等

题目链接 剑指 Offer II 012. 左右两边子数组的和相等 easy 题目描述 给你一个整数数组 nums&#xff0c;请计算数组的 中心下标 。 数组 中心下标 是数组的一个下标&#xff0c;其左侧所有元素相加的和等于右侧所有元素相加的和。 如果中心下标位于数组最左端&#xff0c;那…...

Java货物摆放

题目描述 小蓝有一个超大的仓库&#xff0c;可以摆放很多货物。 现在&#xff0c;小蓝有 &#xfffd; n 箱货物要摆放在仓库&#xff0c;每箱货物都是规则的正方体。小蓝规定了长、宽、高三个互相垂直的方向&#xff0c;每箱货物的边都必须严格平行于长、宽、高。 小蓝希望所…...

我的思维模型 -- 11.数学与统计学篇

正态分布 核心逻辑&#xff1a;均值回归中心极限定理&#xff1a;大量相互独立、来自同一分布的随机变量&#xff0c;它们的平均值&#xff08;或总和&#xff09;在样本量足够大时&#xff0c;都会趋向于正态分布约 68% 的数据落在 范围内约 95% 的数据落在 范围内均值…...

AISuperDomain:轻量级AI服务域名映射系统,简化多服务配置管理

1. 项目概述&#xff1a;一个面向AI应用的超级域名系统最近在折腾一些AI应用部署和集成的时候&#xff0c;我遇到了一个挺有意思的项目&#xff0c;叫AISuperDomain。乍一看这个名字&#xff0c;可能会让人联想到某种“万能域名”或者“AI域名服务商”&#xff0c;但实际上&…...

3D模型格式转换终极方案:用stltostp轻松实现STL到STEP的专业转换

3D模型格式转换终极方案&#xff1a;用stltostp轻松实现STL到STEP的专业转换 【免费下载链接】stltostp Convert stl files to STEP brep files 项目地址: https://gitcode.com/gh_mirrors/st/stltostp 你是否曾遇到这样的困境&#xff1a;3D打印的STL模型无法在专业CAD…...

国产多模态新星:mPLUG-Owl全解析,从原理到落地

国产多模态新星&#xff1a;mPLUG-Owl全解析&#xff0c;从原理到落地 引言 在ChatGPT引爆文本大模型之后&#xff0c;多模态大模型正成为AI领域的下一个主战场。在这场全球竞赛中&#xff0c;国产模型的表现尤为引人注目。由阿里通义实验室推出的 mPLUG-Owl&#xff0c;凭借…...

Driver Store Explorer:彻底清理Windows驱动存储,让你的系统运行如新的专业工具

Driver Store Explorer&#xff1a;彻底清理Windows驱动存储&#xff0c;让你的系统运行如新的专业工具 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你是否发现Windows系统盘空间越来…...

memtest_vulkan:专业级Vulkan GPU显存稳定性测试工具全解析

memtest_vulkan&#xff1a;专业级Vulkan GPU显存稳定性测试工具全解析 【免费下载链接】memtest_vulkan Vulkan compute tool for testing video memory stability 项目地址: https://gitcode.com/gh_mirrors/me/memtest_vulkan 在GPU计算和图形处理日益重要的今天&…...

构建工程化提示词库:提升AI开发效率与代码质量

1. 项目概述&#xff1a;一个面向开发者的提示词库如果你和我一样&#xff0c;在过去的几年里深度参与了AI应用开发&#xff0c;尤其是基于大语言模型&#xff08;LLM&#xff09;的各类项目&#xff0c;那你一定对“提示工程”这个词又爱又恨。爱的是&#xff0c;一段精心设计…...

基于MCP协议的能源转型智能体:架构、实现与应用场景解析

1. 项目概述&#xff1a;能源转型智能体的“大脑”与“手脚”最近在做一个挺有意思的项目&#xff0c;核心是围绕一个叫apifyforge/energy-transition-intelligence-mcp的智能体展开的。这名字听起来有点拗口&#xff0c;拆开来看&#xff0c;“apifyforge”是发布者&#xff0…...

5分钟彻底解决Mac NTFS读写难题:开源工具Nigate完全指南

5分钟彻底解决Mac NTFS读写难题&#xff1a;开源工具Nigate完全指南 【免费下载链接】Free-NTFS-for-Mac Nigate: An open-source NTFS utility for Mac. It supports all Mac models (Intel and Apple Silicon), providing full read-write access, mounting, and management …...

魔兽世界宏编辑器终极指南:5分钟掌握GSE高级技能自动化

魔兽世界宏编辑器终极指南&#xff1a;5分钟掌握GSE高级技能自动化 【免费下载链接】GSE-Advanced-Macro-Compiler GSE is an alternative advanced macro editor and engine for World of Warcraft. 项目地址: https://gitcode.com/gh_mirrors/gs/GSE-Advanced-Macro-Compi…...