目录
一、基本术语
- 结点(node): 树的元素,含数据项及若干指向其子树的分支
- 结点的度(degree): 结点拥有的子树数
- 叶子(leaf): 度为 0 的结点
- 分支结点: 度不为零的结点,也称为非终端结点
- 树的度: 一棵树中最大的结点度数
- 孩子(child):结点的子树的根
- 双亲(parents):孩子结点的上层结点
- 兄弟(sibling):同一双亲的孩子
- 结点层次(level):根为第 1 层,根的孩子为第 2 层……
- 树的深度/高度(depth):树中结点的最大层次数
对于树的高度和深度说法不一,但我更倾向于这种
一个节点的高度 = 该节点到最下层节点的边数
一个节点的深度 = 该节点到根节点的边数
空树 节点的高度 = 深度 = -1
- 子孙:一个结点所有子树中的结点。
- 祖先:从根结点到达某结点路径上的所有结点。
- 有序树/无序树:如果树中结点的各子树从左到右是有次序的,则称该树为有序树
- 森林(forest):m(≥0) 棵互不相交的树的集合
二、二叉树
1、特点
- 每个结点至多有二棵子树
- 二叉树的子树有左、右之分,且其次序不能任意颠倒
- 二叉树有·n个结点 n>=0
2、性质
- 二叉树的第 i(≥1) 层上至多有 2^(i-1) 个结点
- 深度为 k(≥1) 的二叉树至多有 2^k-1 个结点
- 任何一棵二叉树 T,如果其叶子数为 n0,度为 2 的结点数为 n2,则 n0=n2+1
- 有 n 个结点的完全二叉树深度 log2(𝑛 +1)
- 对有 n 个结点的完全二叉树按层编号,则对任一结点 i(1≤i≤n),有:
若 i=1,则结点 i 是二叉树的根,无双亲;
若 i>1,则其双亲编号=(i/2)
若 2i>n,则结点 i 无左孩子;
如果 2i≤n,则其左孩子编号=2i
若 2i+1>n,则结点 i 无右孩子;
如果2i+1≤n,则其右孩子编号=2i+1
3、二叉树的类型
- 满二叉树
深度为 k 且有 2k-1 个结点的二叉树
每层上的结点数都是最大值,叶结点都集中在二叉树的最下一层
- 完全二叉树
除了最后一层,其余层级必须全部填满,最后一层没填满的要靠左
深度为 k、有 n 个结点的完全二叉树当且仅当,其每一个结点都与深度为 k 的满二叉树中编号从 1 至 n 的结点一一对应
顺序存储不会浪费空间,满二叉树是完全二叉树的子集
- 严格二叉树
每个节点都是0个或2个孩子
- 二叉搜索(排序)树
对于每个节点,其值大于左子树所有节点的值,小于右子树所有节点的值
- 平衡二叉树
是二叉搜索树
对于每个节点,左子树和右子树的高度之差不大于 k 一般为1
- 红黑树
4、点数求解
对于结点数为n的二叉树,如果其叶子数为 n0,度为 2 的结点数为 n2,度为1的结点数为n1则有:
- n0=n2+1
- n=n0+n1+n2
- 度之和=n-1 (分支数比结点数少1)
- 度之和=n1+2n2 (分支数与度为1、度为2相关)
- n= n1+2n2+1
三、哈夫曼树 (最优二叉树)
- 设有 n 个权值 {w1,w2,……wn}
- 构造有 n 个叶结点的二叉树,其叶子结点的权值=wi
- WPL 最小的二叉树叫 Huffman 树
- 权值越大的叶结点越靠近根结点,反之,权值越小的叶结点越远离根结点。
- 没有度为1的结点
- 练习
w = { 5, 29, 7, 8, 14, 23, 3, 11 }
构造不唯一