0. 简单结论
- 对于堆,子树的最大节点数为 2/3n;(树的最底层恰好半满)
- 0 层节点数: 20=1 2 0 = 1
- 1层节点数: 21=2 2 1 = 2
- m-1 层节点数:
2m−1
2
m
−
1
,一半有左右孩子,
2m−2
2
m
−
2
,左右孩子也即底部的叶子节点的数量
2m−1
2
m
−
1
;
- 前 m-1 层(排除掉最底层)节点数为 2m−1 2 m − 1 ,前 m−1 m − 1 层,左边节点右边节点 (2m−1)/2 ( 2 m − 1 ) / 2 ;
1. 数学归纳法
Proof that a binary tree with n leaves has a height of at least log n
高度为 n n 的二叉树,叶子结点不多于 。
数学归纳法,证明三部曲:
- n=0 n = 0 ,只有一个根节点,则叶子结点也为此根节点,为 1,不多于 20 2 0
令高度为 k k ,叶子结点不多于 ,我们需证明:高度为 k+1 k + 1 时,叶子结点不多于 2k+1 2 k + 1
高度为 k+1 k + 1 时,考虑其左右孩子,则其左右孩子(也即左右子树),高度不高于 k k ,则左右孩子叶子节点数也均不高于 ,即左子树,树高不高于 k k ,叶子结点数不高于 ,右子树,树高不高于 k k ,叶子结点数不高于 ,则总的叶子节点数: ≤2k+2k=2k=1 ≤ 2 k + 2 k = 2 k = 1
2. 二叉堆
- 任意一个正整数 n n ,均可拆分为 ( m m 为能取得的最大整数),对于包含 个节点的堆,前 m−1 m − 1 层的节点数为 ∑m−1i=02i=2m−1 ∑ i = 0 m − 1 2 i = 2 m − 1 ,最底层有 k k 个叶子节点,并非整个二叉树有 个叶子节点;
高度为 h h 的堆中,元素个数最多最少分别是多少?
考虑高度为 和高度为 h h 的满二叉树。
- 对于高度为 的满二叉树,树中节点的个数为: ∑h−1i=02i=2h−1 ∑ i = 0 h − 1 2 i = 2 h − 1 (全1二进制数),
- 高度为 h h 的满二叉树,树中节点个数为:
则高度为 h−1 h − 1 满二叉树节点数+1,即 2h 2 h 为 高度为 h h 堆节点个数最少的情况;高度为 满二叉树的节点数,即为高度为 h h 的堆中,元素个数最多的情况;
即任意高度为 的堆中,其包含的节点数范围: [2h,2h+1−1] [ 2 h , 2 h + 1 − 1 ]