理解与实现树结构
在数据结构的探索中,我们此前主要接触的是线性数据结构,如数组、链表、栈和队列。这些线性数据结构在插入和删除操作上,大多能达到 $O(1)$ 的复杂度,但搜索操作相对复杂,通常需要 $O(n)$ 的复杂度。不过,PHP 数组是个例外,它实际上作为哈希表工作,如果索引或键管理得当,搜索复杂度可以达到 $O(1)$。为了解决线性数据结构搜索复杂度高的问题,我们可以采用层次数据结构,树就是一种代表层次数据的特殊抽象数据类型(ADT)。
树的定义与属性
树是由节点(顶点)通过边连接而成的层次化集合。树不能有循环,边只存在于节点与其子节点之间,同一父节点的两个子节点之间不能有边。每棵树有且仅有一个根节点,除根节点外,每个节点都有一个父节点,每个节点可以有零个或多个子节点。
以下是一些描述树数据结构时常用的术语:
|术语|定义|示例|
|----|----|----|
|后代(Descendent)|从父节点通过重复操作可以到达的节点|在树中,M 是 C 的后代|
|祖先(Ancestor)|从子节点通过重复操作可以到达的父节点|B 是 L 的祖先|
|度(Degree)|特定父节点的子节点总数|A 的度为 3,B 的度为 1|
|路径(Path)|从源节点到目标节点的节点和边的序列|从 A 到 M 的路径是 A - C - H - M,路径长度为 4|
|节点高度(Height of node)|节点与最深后代节点之间的边数|节点 B 的高度为 2|
|层级(Level)|节点的代数,根节点层级为 0,父节点层级为 n 时,子节点层级为 n + 1|根节点 A 在层级 0,B、C、D 在层级 1