目录
第四章 二叉树
【一】树的基本术语和树的家族关系
结点
:树中的一个独立单元
结点的度
:结点拥有的子树,数称为结点的度。
度
:子树的个数
树的度
:树中结点的最大度数
▬
根节点
:一棵树可以只有一个节点
叶子结点
:度为0的结点,也称为终端结点
分支结点
:度不为0的结点,也称为非叶子节点
或非终端结点
▬
层数
:根节点在第一层,根节点的子节点在第二层,以此类推
深度
:是从根节点开始自顶向下逐层累加
高度
:是从叶结点开始自底向上逐层累加的
▬
有序树
:树中任意节点的子节点之间有顺序关系
无序树
:树中任意节点之间无顺序关系
森林
:是m(m≥0)棵互不相交的树的集合。
树中有两个结点之间的:
路径
:由这两个结点之间所经过的结点序列构成
路径长度
:路径上所经过的边的个数
▬
孩子
:节点的子树
双亲
:节点是子树的双亲
兄弟
:同一个双亲的孩子之间称为兄弟
堂兄弟
:双亲在同一层的节点相互为堂兄弟
祖先
:从根到此结点所经分支上的所有节点称为此节点的祖先
子孙
:以某节点为根的子树中的任一节点都称为此节点的子孙
【二】基本的二叉树
【三】二叉树的存储结构
类似线性表,二叉树的存储结构也可采用顺序存储和链式存储两种方式。
【四】二叉树的基本性质
1、树中的结点数 = 所有结点的度数 + 1
2、树中结点总数 = 分支数 + 1
【五】二叉树的遍历(遍历序列构造二叉树)
- 先序遍历:根左右
- 中序遍历:左根右
- 后序遍历:左右根
- 层序遍历:自上而下,从左到右
树与森林
【六】线索二叉树___一般使用中序
【七】树的存储方式(3种常用的表示方法)
1.双亲表示法
:以一组连续的存储单元存储树的结点,每个结点除了数据域data外,还附设一个parent域用以指示其双亲结点的位置。
2.孩子表示法
:由于树中每个结点可能有多棵子树,则可用多重链表,即每个结点有多个指针域,其中每个指针指向一棵子树的根结点。
3.孩子兄弟法
又称二叉树表示法
,或二叉链表表示法
:即以二叉链表做树的存储结构。链表中结点的两个链域分别指向该结点的第一个孩子结点和下一个兄弟结点,分别命名为firstchild域和nextsibling域。
把树,从右上,斜的,拉直
【八】树、森林与二叉树的转换
参考:树、森林和二叉树的转换
树转化为二叉树:
(1)加线。在所有兄弟结点之间加一条连线。
(2)去线。树中的每个结点,只保留它与第一个孩子结点的连线,删除它与其它孩子结点之间的连线。
(3)层次调整。(注意第一个孩子是结点的左孩子,兄弟转换过来的孩子是结点的右孩子)
二叉树转换为森林:
(1)从根节点开始,若右孩子存在,则把与右孩子结点的连线删除。
(2)将每棵分离后的二叉树转换为树。
【九】 树和森林的遍历
树的遍历:两种次序遍历树的方法:
先根(次序)遍历树
,即:先访问树的根结点,然后依次先根遍历根的每棵子树;(与先序顺序相同)
后根(次序)遍历
,即先依次后根遍历每棵子树,然后访问根结点
森林的遍历:(与中 序顺序相同)
(1)先序遍历森林
若森林非空,则可按下述规则遍历:
① 访问森林中第一棵树的根结点;
② 先序遍历第一棵树的根结点的子树森林;
③ 先序遍历除去第一棵树之后剩余的树构成的森林。
(2)中序遍历森林
若森林非空,则可按下述规则遍历:
① 中序遍历森林中第一棵树的根结点的子树森林;
② 访问第一棵树的根结点;
③ 中序遍历除去第一棵树之后剩余的树构成的森林。
【十】二叉排序树
二叉排序树(BST),也称二叉查找树,或者二叉判定树(口诀:左小右大)
【11】平衡二叉树
n:高度
F(n):结点树
【12】平衡二叉树的插入
【13】哈夫曼树
带权路径长度(WPL)
最小的二叉树称为哈夫曼树,也称最优二叉树。
W:weighted P:path L:len
哈夫曼编码:左0右1