数据结构-第四章:树与二叉树
树的定义

树的基本概念

- 空树:结点为空集的树
- 非空树
- 有且仅有一个根节点
- 没有后继的结点称为叶子结点
- 有后继的结点称为分支结点
- 除根结点任何一个结点有且仅有一个前驱
- 子树:树中的一部分可构成树的部分,如:

可以看出,树是一种递归递归定义的数据结构:任何树都可以用子树表示。
结点之间的关系:
- 祖先结点
- 子孙结点
- 父结点
- 孩子结点
- 兄弟结点
- 堂兄弟结点
以上不做解释,可以直接“望文生义”
- 路径:从上往下经过的边(树中的边是有向的)
- 路径长度:经过几条边
结点与树的属性
- 结点的层次(深度):从上往下数,默认根结点为第1层
- 结点的高度:从下往上数
- 树的高度(深度):总共几层
- 结点的度:有几个分支
- 树的度:各结点度的最大值
有序树与无序树
- 有序树:逻辑上看树种结点的各子树从左至右是有次序的,不能互换

- 无序树:逻辑上看树种结点的各子树从左至右是无次序的,可以互换

具体取决于所存数据,是否需要通过结点左右位置反应逻辑关系。
森林
m课互不相交的树的集合。

树的性质

- 结点数=总度数+1
- 度为m的树、m叉树的区别

度为m的树第i层至多有$m^{i-1}$个结点
- 第一层:$m^0$
- 第二层:$m^1$
- 第三层:$m^2$
- …
高度为h的m叉树最多有$\frac{m^k-1}{m-1}$个结点
- 等比数列求和
- 高度为h的m叉树至少有h个结点;高度为h度为m的树至少有h+m-1个结点

- 具有n个结点的m叉树的最小高度为[log_m(n(m-1)+1)]

二叉树
定义与基本术语

二叉树是n(n>=0)个结点的有限集合:
- 空二叉树,即n=0
- 由一个根节点和两个互不相交的称为根的左子树和右子树组成。左右子树分别各是一棵二叉树
特点:
- 每个结点至多只有两课子树
- 左右子树不能颠倒(二叉树是有序树)

特殊二叉树:
满二叉树与完全二叉树
- 满二叉树:高度为h,含有$2^h-1$个结点的二叉树
- 只有最后一层有叶子结点
- 不存在度为1的结点
- 按层序从1开始编号,结点i的左孩子为2i,右孩子为2i+1,父节点为[i/2](如果有)

- 完全二叉树:当且仅当其每个结点都与高度为h的满二叉树中编号为1-n的结点一一对应时称为完全二叉树
- 只有最后两层可能有叶子结点
- 最多只有一个度为1的结点
- 同上③
- i<=[n/2]为分支结点,i>[n/2]为叶子结点

二叉排序树
一棵二叉树或是空二叉树,有以下性质:
- 左子树上所有结点的关键字小于根节点的关键字
- 右子树上所有结点的关键字大于根节点的关键字
- 左子树和右子树又各是一棵二叉排序树

平衡二叉树
树上任意结点的左子树和右子树深度只差不超过1。

平衡二叉树尽量增加宽度而非深度,以避免频繁的对比,提高搜索效率。
二叉树的性质
二叉树
- 设非空二叉树中度为0、1和2的结点个数分别为$n_0$,$n_1$,$n_2$,则$n_0=n-2+1$(叶子结点比二分支结点多一个)
假设树种结点总数为n,则:- $n=n_0+n_1+n_2$
- $n=n_1+2n_2+1$
两式相减可证
完全二叉树
- 具有n个结点的完全二叉树的高度h为[$log_2(n+1)$](向上取整)或$[log_2n]+1$(向下取整)
- 第一个:由高为h的满二叉树和h-1的满二叉树夹逼所得
- 第二个:由高为h-1的满二叉树和高位h的完全二叉树夹逼所得
- 对于完全二叉树,可以有结点数n推出度为0,1,2的结点个数
- 完全二叉树最多只有一个度为1的结点,即$n_1=0或1$
- $n_0=n_2+1$→$n_0+n_2$一定是奇数
二叉树的存储结构
顺序存储
---------------------本文结束---------------------