- 一个结点可以有多个子节点,但一个子节点只可以有一个父节点;
0. 递归性
树天然地是一种可递归的结构,即可不断地将其展开为规模更小(但同等结构)的树(子树,是说和原始的树不同,只是规模更小而已)。
1. 分类
- 真二叉树(proper binary tree):不含一度结点的树(只有 0 度和 2 度的结点);
2. 辨异
节点所在的高度(height)在不同的树形结构中,具体语义也有所不同。
- 红黑树将采用所谓的黑高度(black height)
- 左式堆则采用所谓的空节点通路长度(null path length)
3. 定义前驱和后继
比如通过中序遍历,可在二叉树各结点之间定义一个线性次序。既然是线性顺序,便可定义结点之间的前驱和后继关系。
4. 结点插入(insert)和子树接入(attach)的区别
- BinTree 二叉树结构中插入 BinNode 结点对象 ⇒ 结点插入(insertAsLC/insertAsRC)
- BinTree 二叉树结构中插入 BinTree 子树对象(作为左孩子,或者右孩子) ⇒ attachAsLC/attachAsRC
5. 树的遍历
对二叉树的访问多可抽象为如下形式:按照某种约定的次序,对各节点访问一次且仅访问一次。与向量和列表等线性结构一样,二叉树的这类访问也被称作遍历(traversal)。
遍历之于二叉树的意义,同样也为相关算法的实现提供通用的框架。此外,这一过程也等效于将半线性的树形结构,转换为线性结构。
不过,二叉树毕竟已不再是属于线性结构,相对而言,其遍历也更为复杂。