二叉树核心解析:结构、存储与遍历算法详解
一、基本概念
1.1 定义
二叉树是一种特殊的树形结构,其核心特点在于每个结点至多只有两棵子树(即不存在度大于 2 的结点)。此外,二叉树的子树有严格的左右之分,次序不能任意颠倒。简单来说,二叉树中的每个结点最多有两个孩子,也可能没有或只有一个。
注意:二叉树结点的两个孩子分别被称为左孩子和右孩子,顺序是固定的,就像人的左手和右手,不可混淆。
1.2 特殊形态
满二叉树
一棵二叉树的所有非叶子节点都存在左右孩子,并且所有叶子节点都在同一层上,这棵树称为满二叉树。

完全二叉树
对一棵有 n 个结点的二叉树按层序编号,如果所有结点的编号从 1n,且这些结点的位置与同样深度的满二叉树中编号为 1n 的结点位置相同,则这棵二叉树为完全二叉树。实际上,它是在满二叉树的基础上,在最后一层的叶子结点上,从右往左依次删除若干个结点后剩下的部分。

二、存储方式
二叉树作为树的一种,可以使用数组或链式结构来存储。关键在于在存储过程中标记清楚谁是左孩子,谁是右孩子。
2.1 顺序存储
对于完全二叉树或满二叉树,我们可以利用层序遍历的性质进行存储。如果从根节点出发,按照层序遍历的顺序由开始编号,父子之间的编号是可以计算出来的。设节点下标为 i,则可以通过公式直接找到左右孩子和父亲。


如果是非完全二叉树,理论上也可以补成完全二叉树后再编号存储,但这会导致空间浪费严重。例如,一个只有 6 个节点的普通二叉树,顺序存储可能需要分配 10 个空间;极端情况下,一棵右斜树只有 4 个节点,却需要分配 $2^4 - 1$ 个单元。因此,顺序存储结构一般只用于完全二叉树或满二叉树。

2.2 链式存储
使用两个数组 l[N] 和 来模拟指针。其中 表示结点号为 i 的结点的左孩子编号, 表示右孩子编号。



