树 —— 总论

  • 一个结点可以有多个子节点,但一个子节点只可以有一个父节点

0. 递归性

tree = (root, sub-trees)

树天然地是一种可递归的结构,即可不断地将其展开为规模更小(但同等结构)的树(子树,是说和原始的树不同,只是规模更小而已)。

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)。

遍历之于二叉树的意义,同样也为相关算法的实现提供通用的框架。此外,这一过程也等效于将半线性的树形结构,转换为线性结构

不过,二叉树毕竟已不再是属于线性结构,相对而言,其遍历也更为复杂。

原文地址:https://www.cnblogs.com/mtcnn/p/9423750.html