树是一种非线性存储结构,一棵树由多个逻辑关系为“一对多”的结点构成,这些结点之间的关系可以用父子、兄弟、表兄弟等称谓描述。
如果你还不了解什么是树存储结构,请猛击《数据结构的树存储结构》了解。
理论上,一棵树上的各个结点可以有任意个孩子。但是,如果一棵树具备以下两个特征:
- 本身是一棵有序树,即各个结点的孩子位置不能改变;
- 树中各个结点的度(子树个数)不能超过 2,即只能是 0、1 或者 2。
同时具备这 2 个特征的树就称为「二叉树」。
例如下图画了两棵有序树,图 1a) 是二叉树,而图 1b) 不是,因为它的根结点的度为 3,不具备第 2 个特征。
图 1 二叉树示意图
如果一棵树是二叉树,那么它具有以下几个性质:
- 树中第 i 层最多可以有 2i-1 个结点。以图 1a) 为例,第 1 层最多只能有 1 个结点(21-1),也就是根结点;第 2 层最多有 2 个结点(22-1);第 2 层最多有 4 个结点(23-1