快速学会二叉树的前序、中序、后序遍历

article/2025/9/17 16:47:18

一、概念

 

二叉树:一个根节点,两个子节点(子节点可能没有)。

--整篇文章内容中,左侧的子节点简称左,右侧的子节点简称右,根节点简称根。--

前序(先序)遍历:按根左右的顺序输出。

中序遍历:按左根右的顺序输出。

后序遍历:按左右根的顺序输出。

二、入门练习

如上图这样一个简单的二叉树,我们分别输出三种遍历:

前序遍历:按ABC(根左右)的顺序输出。

中序遍历:按B|A|C(左根右)的顺序输出。

后序遍历:按BCA(左右根)的顺序输出。

比较特殊的是前序和后序。前序中,第一个输出是整棵树的根节点;后序中,最后一个输出是整棵树的根节点。记牢这两点,非常好用。

三、进阶练习

已知,前序遍历: GDAFEMHZ,中序遍历: ADEFGHMZ。画出二叉树图形,并输出后序遍历。

解题顺序:先画出二叉树图形,然后按照图形进行后序遍历。

1.根据前序遍历,我们可知G点是整棵树的根节点。那我们就可以这样分:

前: |G|  DAFEMHZ

中: ADEF  |G|  HMZ

从中序中可以直接的看出,G的左边都是它的左子树下的,G的右边都是它右子树下的。

2.接下来,只看G左边部分 

前: G  |D|  AFEMHZ

中: A  |D|  EF  G  HMZ

前序中D是第一个,也就是根节点,中序中D把剩下来的内容分出了左右。

 

 3.因为左侧的A只分出来一个,说明A下面没有子节点了,我们只需要继续分右侧的EF

前: G  D  A  |F| EMHZ

中: A   D  E  |F|  G  HMZ

同样的,我们从前序中发现,F是第一个,也就是说F是根节点;在中序中,E在F的左侧,说明E是F的左子树。

 

 4.这个时候G的整个左子树都确定好了,轮到右子树了。

 前: G   D  A  F  E  |M| HZ

中: A   D  E  F   G  H |M| Z

从前序中,我们可以确定M是右侧的根节点,中序被M分成了左右各一个,说明H和Z正好是M的左右子树。

  5.总结

 通过以上步骤,我们可以发现,先从先序中确定根节点,再通过根节点,看中序中被分割后的位置,判断出节点对应左右子树位置。

6.输出后序

后序是左右根,那我们就看图,找最左边(不一定是最底层)的那一个。

1.从GDM看,左边是D,从DAF看,左边是A,到A就没有然后了。输出结果:A

2.找完左,在以A为子节点的二叉树(DAF)中,找到同级(同一个根节点下)的右子树,存在F,这个时候回到1步骤,从FE找左,就是E,到E没有然后了。输出结果:AE

3.找完左,在以E为子节点的二叉树(FE)中,找到同级的右子树,不存在,没有输出项。

4.FE二叉树的左右都输出了,输出根F。输出结果:AEF

5.DAF二叉树的左右都输出了,输出根D。输出结果:AEFD

6.GDM的左找完了,找右子树,存在M,继续找MHZ的左,就是H,到H就没有然后了。输出结果:AEFDH

7.找完左,在以H为子节点的二叉树(MHZ)中,找到同级的右子树,存在Z,到Z就没有然后了。输出结果:AEFDHZ

8.MHZ二叉树的左右都找完了,输出根M。输出结果:AEFDHZM

9.GDM这层的左右都找完了,输出根G。输出结果:AEFDHZMG

整个逻辑,就是递归

后序:递归输出左,递归输出右,递归输出根。

前序:递归输出根,递归输出左,递归输出右。

中序:递归输出左,递归输出根,递归输出右。

JAVA代码实现二叉树的三种遍历


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

相关文章

算法1—递归实现二叉树的前序、中序、后序遍历

为什么会有这三种遍历? 仅个人理解,计算机特点就是处理速度级快,为了不遗漏、不重复处理二叉树的每一个节点,总得按照某种顺序吧,前辈们发明了处理二叉树节点的顺序:前序遍历、中序遍历、后续遍历&#xf…

二叉树的先序、中序、后序遍历

二叉树的先序、中序、后序遍历 1.前序遍历 前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。 若二叉树为空则结束返回,否则&#xff1a…

二叉树的先序、中序、后序遍历序列

二叉树的遍历主要有三种: (1)先(根)序遍历(根左右) (2)中(根)序遍历(左根右) (3)后(根)序遍历(左右根) 举个例子&…

一文彻底搞定二叉树的前序、中序、后序遍历(图解递归非递归)

前言 大家好,我是bigsai,在数据结构与算法中,二叉树无论是考研、笔试都是非常高频的考点内容,在二叉树中,二叉树的遍历又是非常重要的知识点,今天给大家讲讲二叉树的层序遍历。 这部分很多人可能会但是需…

二叉树知道前序和中序求后序,知道中序后序求中序

今天来总结下二叉树前序、中序、后序遍历相互求法,即如果知道两个的遍历,如何求第三种遍历方法,比较笨的方法是画出来二叉树,然后根据各种遍历不同的特性来求,也可以编程求出,下面我们分别说明。 首先&…

二叉树的前序、中序和后序遍历(Java实现)

文章目录 前言1. 中左右进行遍历:2. 代码实现 二、中序1. 左中右进行遍历2. 代码实现 三、后序1. 左右中进行遍历2. 代码实现 四、逆推二叉树 前言 二叉树一遍有前序、中序和后序三种遍历方式,不同的遍历方式有不同的用处。 二叉树遍历都是先左后右的。…

二叉树的先序,中序,后序遍历序列

二叉树有三种遍历: 1. 先序遍历: (根左右) 2.中序遍历 : (左根右) 3.后序遍历: (左右根) 举个例子:(以下动画图转载自https://blo…

如何判断二叉树的前序,中序,后序遍历

文章目录 前言一、如何判断二叉树的前序,中序,后序遍历?二、已知二叉树的前序遍历和中序遍历,如何得到它的后序遍历?三、程序实现总结 前言 最近复习题中看到二叉树,对于它的前序,中序&#xf…

关于二叉树的前序、中序、后序三种遍历

二叉树遍历分为三种:前序、中序、后序,其中序遍历最为重要。为啥叫这个名字?是根据根节点的顺序命名的。 比如上图正常的一个满节点,A:根节点、B:左节点、C:右节点,前序顺序是ABC&a…

二叉树顺序存储之 前序,中序 ,后序遍历

二叉树遍历的概念: 二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树中的所有结点,使得每个结点被访问一次且仅被访问一次。 1、前序遍历 先输出当前结点的数据,再依次遍历输出左结点和右结点 如下图二叉树分析&#…

二叉树的前序、中序和后序遍历

目录 文章目录 目录前言一、二叉树遍历是什么?二、二叉树遍历的种类 1.前序遍历2.中序遍历3.后序遍历总结 前言 例如:跟着其他的大神学习了二叉树的遍历,下面简单介绍一下二叉树遍历的知识。 (我是一个纯小白) 一、二…

二叉树的前序,中序,后序遍历

前序遍历:根节点->左子树->右子树(根->左->右) 中序遍历:左子树->根节点->右子树(左->根->右) 后序遍历:左子树->右子树->根节点(左->右->根&a…

二叉树的前序、中序、后序遍历

文章目录 前言一、用递归法实现遍历1.1 前序遍历1.2 中序遍历1.3 后序遍历 二、用迭代法实现遍历2.1 前序遍历2.2 中序遍历2.3 后序遍历2.3.1 后序解法一2.3.2 后序解法二 三、测试验证 前言 本文主要记录二叉树的遍历方法,文章的主要知识点来源为: htt…

二叉树中已知前序和中序求其后序(图解加技巧让你轻松掌握)

一 首先咱得了解二叉树的结构,和前序/中序/后序遍历分别是什么。 1:什么是根和左右孩子:二叉树的每个节点都可以作为根,每个根下面的叫左右孩子,也可以没有孩子 ​ 实际使用中会如下图A是根左孩子是B,右孩子是C&a…

二叉树的前序、中序、后序

一、概念 二叉树遍历分为三种:前序、中序、后序,其中序遍历最为重要。 二、特点 A:根节点、B:左节点、C:右节点; 前序顺序是ABC(根节点排最先,然后同级先左后右);中序…

数据结构:二叉树(先、中、后序)

一、实现功能描述: 1、使用先序序列来创建二叉树,并使用递归算法实现先序、中序、后序输出。 2、使用先序序列来创建二叉树,并使用非递归算法实现先序、中序、后序输出。 3、使用中序、后序的序列来创建二叉树,并使用先序输出。 …

二叉树的先序、中序、后序遍历超详解

以上图为基础 ①前序遍历的方式是:首先访问根节点,然后访问左子树,最后访问右子树。 前序遍历序列:F C A D B E H G M ②中序遍历的方式是:首先访问左子树,接着访问根结点,最后访问右子树。 中序…

二叉树的先序、中序、后序以及层次遍历

二叉树的先序、中序、后序以及层次遍历 方法:在遍历二叉树的时候,一个节点的遍历我们把它看做要经过它三次(下图红色区域)。 当经过一次,被写出来的点,我们称它为先序遍历。 当经过两次,被写出来的点,我…

二叉树的遍历(先序、中序、后序和层次法)

一、二叉树的遍历 ●遍历是指按指定的规律从根结点开始,对二叉树中的每个结点遍历一次且仅遍历一次。 ●遍历可以采用递归方法(程序简单)和非递归方法(程序稍复杂)。从中可以寻出“足迹”。 例如下列一颗简单的二叉树…

原生ajax的实现步骤

原生ajax的实现步骤 创建ajax对象 var xhr new XMLHttpRequest(); 告诉ajax请求地址以及请求方式(ajax下的open方法) xhr.open(‘get’,’http://www.example.com’); 第一个参数为请求方式,第二个参数为请求地址/服务器端对应的路由请求地…