二叉树遍历(前序遍历、中序遍历、后序遍历)

article/2025/8/28 2:51:51

1.说明

  1. 前序遍历: 先输出父节点,再遍历左子树和右子树

  2. 中序遍历: 先遍历左子树,再输出父节点,再遍历右子树

  3. 后序遍历: 先遍历左子树,再遍历右子树,最后输出父节点

  4. 小结: 看输出父节点的顺序,就确定是前序,中序还是后序

2.分析遍历的步骤

1.先创建一棵二叉树

2.前序遍历

2.1 先输出当前结点(初始时为根结点root)

2.2 如果左子结点不为空,则递归继续前序遍历

2.3如果右子结点不为空,则递归继续前序遍历

3.中序遍历

3.1 如果当前结点左子结点不为空,则递归继续中序遍历

3.2 输出当前结点

3.3 如果当前结点右子结点不为空,则递归继续中序遍历

4.后序遍历

4.1 如果当前结点左子结点不为空,则递归继续后续遍历

4.2 如果当前结点右子结点不为空,则递归继续后续遍历

4.3 输出当前结点

3.代码实现

public class BinaryTreeDemo {public static void main(String[] args) {// 第三步:将结点连接形成二叉树(在main方法中实现)BinaryTree binaryTree = new BinaryTree();//创建需要的结点HeroNode root = new HeroNode(1, "宋江");HeroNode heroNode2 = new HeroNode(2, "吴用");HeroNode heroNode3 = new HeroNode(3, "卢俊义");HeroNode heroNode4 = new HeroNode(4, "关胜");HeroNode heroNode5 = new HeroNode(5, "林冲");// 注意binaryTree.setRoot(root);//手动创建二叉树root.setLeft(heroNode2);root.setRight(heroNode3);heroNode3.setLeft(heroNode4);heroNode3.setRight(heroNode5);//测试遍历System.out.println("前序遍历");binaryTree.preOrder();// 1 2 3 4 5System.out.println("中序遍历");binaryTree.infixOrder();// 2 1 4 3 5System.out.println("后序遍历");binaryTree.postOrder();// 2 4 5 3 1}}
// 第一步:先创建HeroNode结点
// 第二步:创建二叉树
// 第三步:将结点连接形成二叉树(在main方法中实现)// 第二步:创建二叉树
class BinaryTree{// 定义根结点private HeroNode root;// 创建根结点public void setRoot(HeroNode root){this.root = root;}// 前序遍历public void preOrder(){if (this.root != null) {this.root.preOrder();} else {System.out.println("二叉树为空,不能遍历");}}// 中序遍历public void infixOrder(){if (this.root != null) {this.root.infixOrder();} else {System.out.println("二叉树为空,不能遍历");}}// 后序遍历public void postOrder(){if (this.root != null) {this.root.postOrder();} else {System.out.println("二叉树为空,不能遍历");}}}//第一步:先创建HeroNode结点
class HeroNode{private int no;private String name;private HeroNode left;//左子结点,默认值为nullprivate HeroNode right;//右子结点public HeroNode(int no, String name) {this.no = no;this.name = name;}public int getNo() {return no;}public void setNo(int no) {this.no = no;}public String getName() {return name;}public void setName(String name) {this.name = name;}public HeroNode getLeft() {return left;}public void setLeft(HeroNode left) {this.left = left;}public HeroNode getRight() {return right;}public void setRight(HeroNode right) {this.right = right;}@Overridepublic String toString() {return "HeroNode [no=" + no + ", name=" + name + "]";}// 编写前序遍历的方法public void preOrder(){// 输出当前结点System.out.println(this);//递归遍历左子结点if (this.left != null) {this.left.preOrder();}//递归遍历右子结点if (this.right != null) {this.right.preOrder();}}//编写中序遍历的方法public void infixOrder(){//递归遍历左子结点if (this.left != null) {this.left.infixOrder();}//输出当前结点System.out.println(this);//递归遍历右子结点if (this.right != null) {this.right.infixOrder();}}//后序遍历public void postOrder(){//遍历左子结点if (this.left != null) {this.left.postOrder();}// 遍历右子结点if (this.right != null) {this.right.postOrder();}// 输出当前结点System.out.println(this);}}

4.测试代码中二叉树图

1659965172355

求二叉树的深度

//求二叉树的深度public int getDepth(HeroNode root) {int LD,RD;//左二叉树,右二叉树的深度if (root == null) {return 0;}else {LD = getDepth(root.getLeft());RD = getDepth(root.getRight());return (LD>RD ? LD : RD) +1;}}

5.Java中this知识点补充

可以通过debug来加深对代码的理解

this的类型:哪个对象调用就是哪个对象的引用类型


http://chatgpt.dhexx.cn/article/wT2mVWFZ.shtml

相关文章

144. 二叉树的前序遍历

给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 1: 输入:root [1,null,2,3] 输出:[1,2,3] 示例 2: 输入:root [] 输出:[] 示例 3: 输入:root [1] 输出&a…

二叉树的前序遍历(C++)

二叉树的前序遍历 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 1: 输入: root [1,null,2,3] 输出: [1,2,3]示例 2: 输入: root [] 输出: []示例 3: 输入&…

二叉树的前序遍历(C语言)

我们从两个方向讲解二叉树的前序遍历(递归迭代) 一.递归 思想: 从根节点开始向其左孩子遍历每经过一个节点记录一下该节点的数值(只在第一次经过该节点时进行记录),当走到NULL时返回上一个节点,然后遍历其右孩子,如果右孩子存在记录其数值,再重复上面操作,如果不存在为NULL直…

二叉树前序遍历--递归

前序遍历的概念:遍历顺序-根左右,从根节点往下查找,先找左子树、直至左子树为空(左子节点逐个入栈、直至左子节点为空),再找右子树(出栈找右子节点)第一次经过节点即打印,直到打印null,往回溯,打…

二叉树前序遍历(递归以及非递归)

二叉树前序遍历 对于一种数据结构而言,我们最常见的就是遍历,那么关于二叉树我们该如何去遍历呢? 请看大屏幕 。。。。 上图是一棵二叉树,前序遍历结果:1 2 4 5 3 6 咦,我想你可能会疑惑什么叫做前序遍历…

二叉树前序遍历三种方式(c++ 实现)

一.递归 递归很简单,只要在调用子节点前对当前节点进行操作即可 struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode() : val(0), left(nullptr), right(nullptr) {}TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}TreeNode(int x, …

数据结构二叉树前序遍历递归和非递归算法

2022.11.19 二叉树前序遍历递归和非递归算法 任务描述相关知识编程要求测试说明C/C代码 任务描述 本关任务:给定一棵二叉树,使用递归和非递归的方法实现二叉树的先(前)序遍历结果。 相关知识 为了完成本关任务,你需…

二叉树前序遍历(递归法和迭代法(即非递归法))——C++

声明:本文原题主要来自力扣力扣,记录此博客主要是为自己学习总结,不做任何商业等活动 本文主要讲解二叉树的前序遍历递归法和迭代法。中序遍历和后序遍历可以参考博主下面两篇博客:二叉树中序遍历(递归法和迭代法(非递…

二叉树前序遍历-迭代

二叉树的前序遍历 对于一颗二叉树,当遍历它的时候使用 递归总是轻而易举的。这是二叉树前序遍历-使用递归 public void preorderTraversal(TreeNode root){if(rootnull)return;System.out.print(root.data" ");preorderTraversal(root.left);preorderT…

二叉树前序遍历执行过程

二叉树前序遍历执行过程 前序遍历:根-左-右 图示 记录与总结,2021年 11月 12日 星期五 11:35:14 CST。

二叉树的前序遍历

二叉树文章系列: 二叉树的前序遍历二叉树的中序遍历二叉树的后序遍历二叉树的层序遍历二叉树的前序、中序、后序、层序遍历【解法完整版】 本文目录 一、解题思路:递归二、解题思路:迭代(方法1)三、解题思路&#xff…

二叉树的先序遍历

二叉树的概念 二叉树是一种特殊的树。二叉树的特点是每个节点最多有两个儿子,左边的叫左二子,右边的叫做右儿子,或者说每个结点最多有两棵子树,二叉树要么为空,要么由根节点、左子树和右子树组成,而左子树…

(数据结构)二叉树先序遍历

二叉树先序遍历 二叉树先序遍历的实现思想是: 访问根节点访问当前节点的左子树若当前节点无左子树,则访问当前节点的右子树 图 1 二叉树 以上图 1 为例,先序遍历的过程如下: 访问该二叉树的根节点,找到 1访问节点 1 …

【SpringBoot高级篇】SpringBoot集成Elasticsearch搜索引擎

【SpringBoot高级篇】SpringBoot集成Elasticsearch搜索引擎 1. 什么是Elasticsearch?2. 安装并运行Elasticsearch2.1 拉取镜像2.2 启动镜像 3. 安装kibana3.1 拉取kibana镜像3.2 启动kibana镜像 4. Elasticsearch基本概念索引(Index)文档(Do…

【Elasticsearch】 es 搜索 返回信息 字段 解释

本文为博主九师兄(QQ:541711153 欢迎来探讨技术)原创文章,未经允许博主不允许转载。 文章目录 1.概述 1.概述 官网:https://www.elastic.co/guide/en/elasticsearch/reference/5.6/search-request-body.html#request-body-search…

分布式搜索引擎 ElasticSearch(ES)

一、初识elasticsearch 1.了解ES 1)elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容。elasticsearch结合kibana、Logstash、Beats,也就是elast…

Elasticsearch搜索引擎该怎么使用,这篇文章彻底讲透(荣耀典藏版)

目录 前言 一、先说说 Lucene 二、ES 核心概念 2.1、集群(Cluster) 2.1.1、发现机制 2.1.2、节点的角色 2.1.3、脑裂现象 2.2、分片(Shards) 2.3、副本(Replicas) 2.4、映射(Mapping&…

ElasticSearch搜索引擎常见面试题总结

一、ElasticSearch基础: 1、什么是Elasticsearch: Elasticsearch 是基于 Lucene 的 Restful 的分布式实时全文搜索引擎,每个字段都被索引并可被搜索,可以快速存储、搜索、分析海量的数据。 全文检索是指对每一个词建立一个索引&a…

elasticsearch搜索分数自定义以及相关度计算相关

elasticsearch搜索分数自定义以及相关度计算相关 es通过其score字段对搜索结果进行排序 在进行业务开发时通常其默认的分数计算是不符合预期的。 最简单的方法是通过boost字段来对每一个字段进行权重设置,来体现该字段的重要性。 boost字段会导致分数的计算公式发…

【ES】ElasticSearch搜索的底层原理?倒排索引和TF-IDF打分算法

目录 Elasticsearch搜索的底层原理倒排索引及其结构TF-IDF打分算法参考 Elasticsearch搜索的底层原理 ES搜索是分词后,每个字可以利用FST高速找到倒排索引的位置,并迅速获取文档id列表,大大的提升了性能,减少磁盘IO。 ES的搜索原…