数据结构之二叉树遍历

embedded/2024/12/22 18:29:54/

二叉树的遍历

二叉树

先序遍历

先输入父节点,再遍历左子树和右子树:A、B、D、E、C、F、G

中序遍历

先遍历左子树,再输出父节点,再遍历右子树:D、B、E、A、F、C、G

后序遍历

先遍历左子树,再遍历右子树,最后输入父节点:D、E、B、F、G、C、A

核心理论

  • 根据父节点的输出顺序来确定先序、中序、后续。
  • 采用递归的方式对左子树和右子树进行遍历。
    • 每次递归都是一个方法的入栈操作,直至到最后一个子节点为空的时候,执行方法,然后方法栈弹出。
    • 每个方法栈弹出后,开始执行下一个方法栈,以此类推,相应的方法则可输出。

代码实现

package org.example.data.structure.basetree;import java.util.ArrayList;
import java.util.List;
import java.util.Objects;/*** @author xzy* @since 2024/9/16 15:14*/
public class PersonNode {private static final List<Person> PRE_ORDER_LIST = new ArrayList<>();private static final List<Person> MID_ORDER_LIST = new ArrayList<>();private static final List<Person> POST_ORDER_LIST = new ArrayList<>();private Person data;private PersonNode left;private PersonNode right;public PersonNode() {}public PersonNode(Person person) {this.data = person;}public PersonNode(Person data, PersonNode left, PersonNode right) {this.data = data;this.left = left;this.right = right;}/*** 前序遍历*/public List<Person> preOrder() {PRE_ORDER_LIST.add(this.getData());if (Objects.nonNull(this.getLeft())) {this.getLeft().preOrder();}if (Objects.nonNull(this.getRight())) {this.getRight().preOrder();}return PRE_ORDER_LIST;}/*** 中序遍历*/public List<Person> midOrder() {if (Objects.nonNull(this.getLeft())) {this.getLeft().midOrder();}MID_ORDER_LIST.add(this.getData());if (Objects.nonNull(this.getRight())) {this.getRight().midOrder();}return MID_ORDER_LIST;}/*** 后续遍历*/public List<Person> postOrder() {if (Objects.nonNull(this.getLeft())) {this.getLeft().postOrder();}if (Objects.nonNull(this.getRight())) {this.getRight().postOrder();}POST_ORDER_LIST.add(this.getData());return POST_ORDER_LIST;}public Person getData() {return data;}public void setData(Person data) {this.data = data;}public PersonNode getLeft() {return left;}public void setLeft(PersonNode left) {this.left = left;}public PersonNode getRight() {return right;}public void setRight(PersonNode right) {this.right = right;}
}

源码与测试案例

gitee地址


http://www.ppmy.cn/embedded/118324.html

相关文章

电脑ip地址怎么换地区:操作步骤与利弊分析

在当今全球化的信息时代&#xff0c;人们经常需要访问不同地区的网络资源。然而&#xff0c;由于地理位置的限制&#xff0c;某些内容或服务可能只对特定地区的用户开放。这时&#xff0c;更换电脑IP地址的地区就成为了一个实用的解决方案。本文将详细介绍两种更换电脑IP地址地…

使用DolphinScheduler调度实现sqoop增量导入时遇到 Caused by:Class QueryResult not found 错误解决

解决方法&#xff1a; 拷贝一个 QueryResult.jar 到 sqoop 的 lib 下 【临时解决方案】 报错信息中有一个相关路径&#xff01;拷贝该路径下的QueryResult.jar到sqoop的lib下&#xff1a; cp /tmp/sqoop-root/compile/dc8e6e7d48be670d676323bf76fd9fe9/QueryResult.jar /op…

vmware-toolbox安装,VMware虚拟机访问win10共享目录

问题&#xff1a;VMware界面无法安装vmware-toolbox&#xff0c;共享目录设置失败 解决方法&#xff1a; VMware设置 共享文件夹 ubuntu24 vm中运行vmware-toolbox-cmd -v 检查版本 vm运行sudo apt install open-vm-tools // vm可能需要重启 vm的 /mnt 目录下如果没有 hgfs…

肿瘤放疗期刊杂志

欧洲放疗The European SocieTy for Radiotherapy and Oncology(ESTRO) 红皮杂志&#xff0c;国际放射肿瘤学:生物学:物理学杂志&#xff0c;International Journal of Radiation OncologyBiologyPhysics 绿皮杂志 &#xff0c;放射疗法与肿瘤学&#xff0c;Radiotherapy and…

手机在网状态查询接口如何用C#进行调用?

一、什么是手机在网状态查询接口&#xff1f; 手机在网状态查询接口是利用实时数据来对手机号码在运营商网络中的状态进行查询的工具&#xff0c;包括正常使用状态、停机状态、不在网状态、预销户状态等。 二、手机在网状态查询适用哪些场景&#xff1f; 例如&#xff1a;商…

Helm介绍安装使用

Helm介绍 Helm介绍官网&#xff1a;Helm中的一些概念Helm v3版本变化K8s版本支持的各个helm版本对照表下载配置国内存放chart仓库的地址 Helm基本使用搜索和下载Chart部署charthelm部署memcached服务验证memcache是否部署成功&#xff1a; release相关操作 Helm介绍 官网&…

Vue Element UI 打包上线后icon偶发性乱码问题

1、升级sass版本&#xff0c;及对应的sass-loader 升级到 sass升级到1.39.0会出现不兼容报错&#xff0c;不支持“/” 2、vue.config.js中添加配置 css: { loaderOptions: { sass: { sassOptions: { outputStyle: expanded } } } }

haproxy程序崩溃问题处理

背景&#xff1a; 线上一k8s环境告警出节点失联&#xff0c;通过排查和k8s的api建立链接失败&#xff0c;检查发现haproxy出现了重启&#xff0c;对应的日志显示出程序运行崩溃&#xff0c;这个情况根据日志追溯&#xff0c;发现曾多次崩溃&#xff0c;后续也在其他k8s环境也有…