二叉树 是每个节点最多只有两个子节点的树形结构,这两个子节点分别称为左孩子 和右孩子,且左右顺序固定不可颠倒。
一、二叉树的简介
基本特征
-
每个节点度数 ≤ 2(子节点数不超过2)。
-
子树有左右之分,即使只有一个子节点也必须区分是左还是右。
-
递归定义:二叉树要么为空,要么由一个根节点和两棵互不相交的二叉树(左子树和右子树)组成。
存储方式
-
链式存储:每个节点包含数据域、左指针、右指针。
-
顺序存储(数组):按层序排列,根节点下标1,节点i的左孩子为2i,右孩子为2i+1(适用于完全二叉树)。
遍历方式
-
前序:根→左→右
-
中序:左→根→右
-
后序:左→右→根
-
层序:从上到下,从左到右
二叉树广泛应用于表达式解析、哈夫曼编码、堆、搜索算法、数据库索引等场景。
二、二叉树的分类
常见分类
| 类型 | 说明 |
|---|---|
| 满二叉树 | 每层节点数都达到最大值,所有叶子节点在同一层 |
| 完全二叉树 | 除最后一层外全满,最后一层节点从左到右连续排列 |
| 平衡二叉树 | 任意节点左右子树高度差不超过1 |
| 二叉搜索树 | 左子树所有节点值 < 根节点值 < 右子树所有节点值 |
1、满二叉树
**满二叉树(Full Binary Tree / Perfect Binary Tree)** 是指所有非叶子节点都有两个子节点,且所有叶子节点都在同一层的二叉树。
定义要点
-
每个内部节点(非叶子节点)恰好有两个子节点(左孩子和右孩子)。
-
所有叶子节点位于同一层(深度相同)。
-
不存在度为 1 的节点。
数学性质
-
若树的高度为 h(根节点高度为 1),则节点总数为 2h−1。
-
第 k层(1≤k≤h)的节点数为 2k−1。
-
叶子节点数为 2h−1。
示例
高度为 3 的满二叉树:
1
/ \
2 3
/ \ / \
4 5 6 7
所有非叶子节点(1、2、3)都有两个子节点,叶子节点(4、5、6、7)都在同一层。
与完全二叉树的区别
| 满二叉树 | 完全二叉树 |
|---|---|
| 所有层都必须填满 | 允许最后一层不满,但节点必须靠左连续 |
| 节点数固定为 2h−1 | 节点数范围 2h−1,2h−1 |
| 一定是完全二叉树 | 不一定是满二叉树 |
| 叶子节点全部在同一层 | 叶子节点可能分布在最后两层 |
2、完全二叉树
**完全二叉树(Complete Binary Tree)** 是指除了最后一层外,其余各层的节点数都达到最大值,并且最后一层的节点全部靠左连续排列的二叉树。
核心条件
-
除最后一层外,每一层都被填满(节点数达到最大)。
-
最后一层的节点从左到右依次排列,中间不能有空缺。
举例
1
2 3
4 5 6
重要性质
-
可用数组高效存储:根节点下标1,节点i的左孩子为2i,右孩子为2i+1。
-
节点数n与高度h满足:2h−1≤n<2h。
-
叶子节点只能出现在最后两层,且最后一层的叶子节点靠左连续。