二叉树的遍历

article/2025/9/22 5:11:36

遍历一棵二叉树有很多种方法。假如用D、L、R分别代表二叉树的根结点、左子树、右子树,那么要遍历这棵二叉树,方法就有6种:DLR、DRL、LDR、LRD、RDL、RLD。一般在遍历时遵循先左后右的原则,因此常用的遍历方法有三种:DLR,称为先(根)序遍历;LDR,称为中(根)序遍历;LRD,称为后(根)序遍历。

先序遍历

先序遍历是指在遍历二叉树时先访问根结点,然后访问左子树,最后访问右子树。例如下图的二叉树,使用先序遍历访问的结果是ABFLDI。

tips:可以想象有一个标记着“根左右”的三角形每到一个结点时让三角形的根与之对应来看。

先序遍历过程是这样的(根左右):

第一步:访问根结点,输出A

第二步:访问左子树,左子树是以B为根结点的二叉树。所以输出B

 第三步:访问B的左子树,发现没有左子树,则访问右子树,右子树是以F为根结点的二叉树。所以输出F

 第四步:访问F的左子树,左子树是以L为根结点的左子树。所以输出L

 第五步:访问L的左子树,发现L没有左子树,则访问右子树,L没有右子树,表示以L为根结点的二叉树访问完毕,同时也代表着F的左子树访问完毕。

第六步:访问F的右子树,发现没有右子树,表示以F为根结点的二叉树访问完毕,同时也代表着B的右子树访问完毕,也代表着A的左子树访问完毕。

 第七步:访问A的右子树,右子树是以D为根结点的二叉树。所以输出D

 第八步:访问D的左子树,左子树是以I为根结点的二叉树。所以输出I

第九步:访问I的的左子树,发现没有左子树,则访问I右子树,发现也没有右子树,则表示已I为根结点的二叉树访问结束,同时也代表D的左子树访问结束。

 

 第十步:访问D的右子树,发现没有右子树,则表示以D为根结点的二叉树访问结束,同时也代表A的右子树访问结束,整棵树遍历完成。

中序遍历

中序遍历是指在遍历二叉树时先访问左子树,然后访问根结点,最后访问右子树。例如下面的二叉树,使用中序遍历访问的结果是BLFAID。

tips:遍历的第一个值查找,一开始就目标明确的找最底层的左子树并输出,再开始按照左根右的方式去依依输出,一层一层往上。

根据先序遍历同理可得,中序遍历过程是(左根右):

  1. 先访问根结点A的左子树,左子树是B为根结点的二叉树,再访问B的左子树,B没有左子树,则访问根结点B,输出B
  2. 接着访问B的右子树,右子树是以F为根结点的二叉树;
  3. 继续访问F的左子树,F的左子树是以L为根结点的二叉树;
  4. 再继续访问L的左子树,左子树不存在,则访问根结点L,输出L
  5. 然后访问L的右子树,右子树不存在,则表示以L为根结点的二叉树访问结束,同时也代表着F的左子树访问结束,访问根结点F,输出F
  6. 访问F的右子树,不存在,则F为根结点的二叉树访问完毕,同时也表示以B为根结点的右子树访问完毕;
  7. 访问根结点A,并输出A
  8. 访问A的右子树,A的右子树是以D为根结点的二叉树,继续访问D的左子树,左子树是以I为根结点的二叉树,再继续访问I的左子树,不存在,则访问根结点I,并输出I
  9. 接着访问I的右子树,没有,则表示以I为根结点的二叉树访问完毕,同时也表示D的左子树访问完毕,然后访问根结点D,并输出D
  10. 访问D的右子树,不存在,表示以D为根结点的二叉树访问结束,同时也代表着A的右子树访问完毕,整个遍历结束。

后序遍历

后序遍历是指在遍历二叉树时先访问树的左子树,然后访问右子树,最后访问根结点。有了先序遍历和中序遍历的经验,后序遍历对大家来说已经不在话下了,可以尝试一下去遍历下图的二叉树。答案在最后面。

树是递归定义的,在遍历二叉树时也用到了递归,首先将整棵二叉树当作有三个单元的结构:根节点、左子树、右子树。遍历完根结点,开始遍历左子树,把左子树当成一棵独立的二叉树来遍历;同样,当遍历右子树时,也将右子树当成一棵独立的二叉树来遍历,这就是递归思想。

答案:后序遍历访问的结果是LFBIDA。


http://chatgpt.dhexx.cn/article/99URhT0L.shtml

相关文章

二叉树的遍历详解

概述 二叉树的遍历是一个很常见的问题。二叉树的遍历方式主要有:先序遍历、中序遍历、后序遍历、层次遍历。先序、中序、后序其实指的是访问父节点的次序。在遍历过程中,若访问顺序是父节点-左孩子节点-右孩子节点,就是先序遍历,…

“二叉树遍历“详解 以及 二叉树的实现

目录 一.二叉树的遍历 1.二叉树的遍历的解释: 2.二叉树的遍历有三种递归结构 (1) 实现先序遍历: (2) 实现中序遍历: (3) 实现后序遍历: (4) 二叉树的层序遍历 层序遍历代码: 二.二叉树的递归实现相关函数讲解…

二叉树遍历详解

二叉树的遍历方式是最基本,也是最重要的一类题目,我们将从「前序」、「中序」、「后序」、「层序」四种遍历方式出发,总结他们的递归和迭代解法。 一、二叉树定义 二叉树(Binary tree)是树形结构的一个重要类型…

讲透学烂二叉树(三):二叉树的遍历图解算法步骤及JS代码

二叉树的遍历是指不重复地访问二叉树中所有结点,主要指非空二叉树,对于空二叉树则结束返回。 二叉树的遍历分为 深度优先遍历 先序遍历:根节点->左子树->右子树(根左右),有的叫:前序遍历…

二叉树的中序遍历算法(Java三种实现方法)

文章目录 题目一、二叉树的节点定义二、三种遍历方法1.递归算法思想 2.迭代算法思想 3.Morris 中序遍历算法思想 总结 题目 给定一个二叉树的根节点 root ,返回它的 中序 遍历 一、二叉树的节点定义 public class TreeNode {int val;TreeNode left;TreeNode righ…

二叉树遍历的几种常见方法

二叉树的遍历方法 一.二叉树分类: 完全二叉树满二叉树扩充二叉树平衡二叉树 二.二叉树的四种遍历方式: 前序遍历(先根,再左,最后右)中序遍历(先左,再根,最后右&#…

二叉树的三种遍历方式

目录 1.二叉树的结构: 2.二叉树的前序遍历: 3.二叉树的中序遍历: 4.二叉树的后序遍历: 5.二叉树前、中、后序的代码实现: 前序遍历函数: 中序遍历函数: 后序遍历: 完整代码&am…

图解二叉树的三种遍历

1、二叉树的遍历 前序遍历:根结点 —> 左子树 —> 右子树 中序遍历:左子树—> 根结点 —> 右子树 后序遍历:左子树 —> 右子树 —> 根结点 层次遍历:仅仅需按层次遍历就可以 前序遍历:1 2 4 5 7…

二叉树的遍历【 详细讲解 】

二叉树的遍历 一共有4种遍历 先看图,对于这个图进行4种遍历的讲解 1、 先序遍历 定义:若二叉树为空,则空操作;否则 (1)访问根节点(2)先序遍历左子树(3&#…

二叉树的创建及遍历方法

目录 1、二叉树的定义及特点 2、满二叉树和完全二叉树的概念 3、二叉树的存储结构 4、创建二叉树 5、树的四种遍历方法 6、结果及其分析 1、二叉树的定义及特点 二叉树是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树。二叉树的递归定义为&#…

二叉树遍历(图解)

二叉树的顺序存储结构就是用一维数组存储二叉树中的节点,并且节点的存储位置,也就是数组的下标要能体现节点之间的逻辑关系。—–>一般只用于完全二叉树 链式存储—–>二叉链表 定义: lchild | data | rchild(两个指针域&…

图解二叉树及二叉树遍历

二叉树及二叉树遍历 完全二叉树二叉树的遍历遍历的性质 1、完全二叉树 对于一棵具有n个节点的二叉树(按层序编号),如果编号为i的节点与同样深度的满二叉树中编号为i的节点在二叉树的位置完全相同,则为完全二叉树。 换句话来说&a…

数据结构--二叉树遍历(详细过程)

目录 一、什么是二叉树? 二、二叉树的遍历 1. 先序遍历 2. 中序遍历 3.后序遍历 4. 遍历的推导 三、重要的事情 一、什么是二叉树? 1. 二叉树:一种树形结构,特点是每个结点至多只有两颗子树,并且子树有左右之分…

图解法:三分钟掌握二叉树的三种遍历

二叉树作为树中的一种特殊存在机制,人们对于它的排序总结出来了三种方式,让我们一起探寻它的魅力吧! 测试对象 1.先序遍历 首先看一下排序规则 先访问根节点 再先序访问左子树 再先序访问右子树 看上面的素材,得知根节点为…

二叉树的各种遍历算法以及实例

一、二叉树 在计算机科学中,树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构。二叉树是每个节点最多有两个子树的有序树。通常子树被称作“左子树”(left s…

二叉树的四种遍历方法(前序遍历、中序遍历、后序遍历、层序遍历)有图有真相!!!

文章目录 二叉树的四种遍历方式前序遍历(Preorder Traversal)中序遍历(Inorder Traversal)后序遍历(Postorder Traversal)层序遍历(Level Order Traversal) 二叉树的四种遍历方式 相…

二叉树的层次遍历算法

前面学的二叉树的遍历是把二叉树看作3个部分:根,左子树,右子树,然后我们以此来访问3个部分 而层次遍历是把树看成从上到下的若干层:根结点在第一层,根结点的孩子在第二层,根结点的孩子的孩子在第…

二叉树各种遍历算法

二叉树是许多算法题的常用结构,其遍历算法的各种变种就是各种题目。具体的顺序如下: 先序遍历:先根、后左、再右中序遍历:先左、后根、再右后序遍历:先左、后右、再根 递归版先序、中序、后序遍历 最简单、最直接的…

带你图解二叉树的多种递归遍历(建议收藏!!)

文章目录 二叉树的构建结点类型的定义构建二叉树之间的关系 深度优先遍历前序遍历代码实现图解递归(由于图片大小问题,建议用手机客户端查看,以下图解也是) 中序遍历代码实现图解递归 后序遍历代码实现图解递归 广度优先遍历层序遍…

二叉树遍历之图解Mirror算法(莫里斯算法)

144. 二叉树的前序遍历 我们写二叉树的遍历时,一般有两种方式,迭代和递归。然而还有一种神奇的算法,也可以作我们的二叉树递归,且空间复杂度为O(1),要知道,我们迭代和递归都是需要额外栈空间的 递归和迭代网…