用途:考前快速查公式。看到题型后直接定位公式。
一、普通树
边数
e = n - 1
度数总和
Σ(结点度数) = n - 1
按度分类:
n0+n1+n2+... = n
1*n1+2*n2+3*n3+... = n-1
普通树叶子数
n0 = 1 + Σ(i-1)*ni (i>=2)
展开:
n0 = 1+n2+2n3+3n4+...
二、二叉树
核心公式
n0 = n2 + 1
适用:
任何非空二叉树
三、层数与结点数
默认根为第1层。
第k层最多
2^(k-1)
高度h最多
2^h - 1
普通二叉树高度h最少
h
四、满二叉树
高度为h:
总结点 = 2^h - 1
叶子 = 2^(h-1)
内部结点 = 2^(h-1)-1
五、完全二叉树
高度
h = floor(log2 n)+1
等价:
2^(h-1) <= n <= 2^h-1
高度h时结点范围
最少:2^(h-1)
最多:2^h-1
叶子数
ceil(n/2)
最后一个非叶子结点编号
floor(n/2)
度为1结点数
n为奇数 -> n1=0
n为偶数 -> n1=1
六、完全二叉树顺序编号
从1开始编号。
编号为i:
父:floor(i/2)
左孩子:2i
右孩子:2i+1
叶子编号:
floor(n/2)+1 ... n
七、二叉链表空指针
n个结点:
总指针域 = 2n
非空孩子指针 = n-1
空指针 = n+1
八、遍历
先序:根 左 右
中序:左 根 右
后序:左 右 根
层序:队列
根的位置:
先序第一个 = 根
后序最后一个 = 根
重建:
先序+中序 -> 一般唯一
后序+中序 -> 一般唯一
先序+后序 -> 一般不唯一
九、树与森林转二叉树
左孩子,右兄弟
遍历对应:
树先根 = 二叉树先序
树后根 = 二叉树中序
森林先序 = 对应二叉树先序
森林中序 = 对应二叉树中序
十、哈夫曼树
构造
每次选当前最小的两个权值合并
WPL
WPL = Σ(叶子权值 × 路径长度)
快速算法:
WPL = 所有合并产生的新权值之和
结点数量
n个叶子:
内部结点 = n-1
总结点 = 2n-1
平均码长
概率形式:
L = Σ(pi * li)
频数形式:
L = Σ(wi * li) / Σwi
十一、严格m叉树
若每个非叶结点都有m个孩子:
n0 = (m-1)*nm + 1
其中:
n0:叶子数
nm:度为m的结点数
十二、Catalan数(低频)
n个结点能组成多少种不同二叉树形态:
Cn = (1/(n+1)) * C(2n,n)
前几项:
1, 1, 2, 5, 14, 42...
优先级低于完全二叉树、叶子公式和哈夫曼。
十三、题型 -> 公式映射
给度为2结点数,求叶子
二叉树:
n0=n2+1
普通树:
n0=1+Σ(i-1)ni
完全二叉树给n求高度
floor(log2 n)+1
完全二叉树给n求叶子
ceil(n/2)
给编号i求父与孩子
父 floor(i/2)
左 2i
右 2i+1
问二叉链表空指针
n+1
给权值求最小WPL
反复合并当前最小两个值
WPL=所有合并值之和
给先序+中序还原
先序第一个找根
中序按根切左右
递归
十四、公式优先级
第一优先级:必须秒出
e=n-1
n0=n2+1
第k层最多2^(k-1)
高度h最多2^h-1
完全二叉树高度floor(log2 n)+1
完全二叉树叶子ceil(n/2)
父floor(i/2),左2i,右2i+1
空指针n+1
第二优先级:必须会用
普通树叶子公式
遍历还原
树/森林转二叉树
哈夫曼WPL
哈夫曼总结点2n-1
第三优先级:了解
Catalan数
严格m叉树计数
十五、10秒背诵版
树有n点n-1边;
二叉叶子比二度多1;
第k层最多2^(k-1),h层最多2^h-1;
完全树高log下取整加1,叶子上取一半;
父除2,左乘2,右乘2加1;
二叉链表空指针n+1;
哈夫曼两小合并,WPL就是合并和。