二叉树的四种遍历
来源:互联网 发布:windows位图结构 编辑:程序博客网 时间:2024/06/10 15:32
二叉树的遍历主要有四种:
前序遍历(先根遍历、先序遍历): 遵循“根-左-右”的递归遍历思想, 根一定是当前子二叉树先序遍历序列的第一个元素;
中序遍历(中根遍历): 遵循“左-根-右”的递归遍历思想,根位于是当前子二叉树中序遍历序列的中部位置,左边是当前根的左二叉树,右边是当前根的右二叉树;
后序遍历(后根遍历): 遵循“左-右-根”的递归遍历思想, 根一定是遍历序列的最后一个元素;
层次遍历: 遵循从上到下,直左而右的遍历思想, 根一定是遍历序列的第一个元素。
【例题】某二叉树的先序遍历序列为 c a b f e d g,中序遍历序列为 a b c d e f g,则该二叉树是()
A、完全二叉树 B、最优二叉树 C、平衡二叉树 D、满二叉树
解析:
1.根据题意, 整个二叉树的先序遍历序列为 c a b f e d g,可知 c 是整个二叉树的树根,再结合中序遍历序列 a b c d e f g可知以 c 为根的左二叉树中序遍历序列为 ab(左子树由节点 ab 组成),右二叉树中序遍历序列为 defg(右子树由节点 defg 组成), 再返回过来看先序遍历序列,根据“根-左-右”思想,左子树的先序遍历序列为 ab,右子树先序遍历序列为 f e d g。 此时得到如下的二叉树:
2.先构造根节点的右子树形状。 从上图看, c 节点的左子树包含 a 与 b 两个节点, 此左子树先序遍历序列为“ ab”可知a 为左子树的根,再结合中序遍历序列为“ a b”,根据中序序列“左-中-右”规律知以 a 为根节点的左子树为空,而右子树由b 组成,到此可得出根节点 c 的左子树构成形状如下:
3. 接下来继续构造根节点 c 的右子树形状。 节点 c 的右子树由 defg 四个节点构成,对应的前序遍历序列为 f e d g,根据“根-左-右”思想, f 为右子树的根;而右子树中序遍历序列为 d e f g,根据“左-根-右”的思想知根节点 f 的左子树由 de构成,右子树由 g 构成。到此可得出二叉树形状如下:
4.最后确认以 f 为根节点的左子树构成即可。根据题意, f 为根节点的左子树先序遍历序列为 ed 知 f 的左子树中 e 为根节点;再根据 f 为根节点的左子树中序遍历 de 知 e 为根节点的左子树为 d,右子树为空。最终可得出二叉树形状如下:
完全二叉树的特点是若一个结点没有左子结点,则它必定没有右子结点,所以一定是叶子结点。完全二叉树中度为 1 的结点数只能为 0 个或 1 个。 本题的二叉树不满足完全二叉树的特点要求(如节点 a 无左节点, 但却有右节点),并非一棵完全二叉树。
带权路径长度最小(即代价最小)的二叉树称为最优二叉树或赫夫曼树,很显然本题的二叉树不是一棵最优二叉树。
一棵深度为 k 且有 2k-1 个结点的二叉树称为满二叉树。满二叉树中不存在度数为 1 的结点。本题的二叉树显然不是一棵满二叉树, 因其存在度为 1 的节点 a、 e。
平衡二叉树或者是一棵空树,或者是具有下列性质的二叉树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值不超过 1。
本题的二叉树满足平衡二叉树的特点要求,故本题选择 C 选项。
- 二叉树的四种遍历
- 二叉树的四种遍历
- 二叉树的四种遍历实现
- 二叉树的四种遍历方式
- 二叉树的四种遍历算法
- 二叉树的四种遍历方式
- 二叉树的四种遍历
- 6-2 二叉树的遍历 (二叉树的四种遍历方法)
- 四:二叉树遍历
- 四种遍历二叉树的方式(递归,非递归)
- 二叉树的四种遍历及叶子.深度
- 数据结构—二叉树的四种遍历
- 《大话数据结构》之二叉树的四种遍历
- 二叉树的四种遍历(递归、非递归)
- 二叉树的四种遍历(java代码)
- 二叉树后序遍历的四种方法
- 二叉树及其四种遍历
- C#实现二叉树(三元素式)及二叉树遍历的四种方法
- javascript中 visibility和display的区别
- JS学习--用JS读取本地文件
- 生死门问题
- STM32固件库详解
- 最近遇到的若干Web前端问题:disable和readonly,JqueryEasyUI,KindEditor
- 二叉树的四种遍历
- Android 手势&触摸事件
- 笔记-计算机网络-传输层作用
- Java 8 的新特性和改进总览
- Java:volatile 关键字的一点理解
- ——黑马程序员——OC中数据的封装
- 用顺序队列实现的舞会舞伴选择问题
- 高可用可伸缩架构实用经验谈
- 记忆方法(一)概述