一、二叉树的定义
二叉树是n(n≥0)个结点的有限集合,满足:
-
当 n=0 时,称为空二叉树。
-
非空时:
-
有且仅有一个根结点;
-
根结点的子结点分为左子树和右子树;
-
左右子树次序不能颠倒,因此二叉树是有序树。
简单理解:
-
每个结点最多两个孩子(0、1 或 2 个)
-
左孩子≠右孩子,交换后就是两棵不同的树
二、二叉树的五种基本形态
-
空二叉树
-
只有根结点
-
根 + 左子树
-
根 + 右子树
-
根 + 左子树 + 右子树
三、二叉树的四个重要特性
特性 1
二叉树第 i 层上至多有2^(i−1) 个结点
(i ≥ 1,根为第 1 层)
特性 2
深度(高度)为 k的二叉树,最多有2^k − 1 个结点
(这就是满二叉树)
特性 3(最重要公式)
对任意一棵二叉树,若:
-
n₀:叶子结点数(度为 0)
-
n₁:度为 1 的结点数
-
n₂:度为 2 的结点数
则恒成立:
> n₀ = n₂ + 1
推导:
-
总结点数 n = n₀ + n₁ + n₂
-
总边数 = 总度数 = n₁ + 2n₂
-
树中:n = 总边数 + 1
联立得:n₀ = n₂ + 1
特性 4
具有 n 个结点的完全二叉树**的高度为:
> h = [ log₂n ] + 1
或等价写成
> h = [ log₂(n+1) ]
四、两种特殊二叉树
- 满二叉树
-
每一层结点数都达到最大值
-
高度 k,结点总数 = 2^k − 1
-
所有叶子都在最底层
-
只有度为 0 和度为 2 的结点,没有度为 1 的结点
- 完全二叉树
-
除最后一层外,其他层都"满"
-
最后一层结点靠左连续排列
-
最多只有一个度为 1 的结点,且只有左孩子
-
适合顺序存储(数组)
五、完全二叉树的编号性质(层序编号从 1 开始)
对编号为 i 的结点:
-
父结点编号:[ i / 2]
-
左孩子编号:2i
-
右孩子编号:2i + 1
-
若 i > 1,是左孩子则父结点为 i/2;是右孩子则父结点为 (i−1)/2
六、易混淆点
- 二叉树 ≠ 度为 2 的树
-
二叉树严格区分左右
-
二叉树可以只有左子树或只有右子树
-
空树是合法二叉树
-
只有一个孩子时,也要明确是左还是右