非线性结构:树与图的核心概念与特性
非线性结构是指数据元素之间存在一对多或多对多关系的结构,无法用线性序列完整描述。常见的非线性结构包括树(一对多)和图(多对多),它们广泛应用于层次关系建模(如文件系统)、网络关系描述(如社交网络)等场景。
树(Tree):一对多的层次结构
树是一种具有层次关系的非线性结构,核心特征是存在一个根节点,其余节点分属不同子树,形成一对多的分支关系。
树的定义与核心特征
树是由 n(n ≥ 0)
个节点组成的有限集合:
- 当
n = 0
时,称为空树。 - 当
n > 0
时,有且仅有一个根节点(无前驱节点);其余节点可分为若干个互不相交的子集,每个子集本身也是一棵树(称为子树)。
核心特征:
- 根节点唯一,无前驱。
- 除根节点外,每个节点有且仅有一个前驱(父节点)。
- 每个节点可以有任意多个后继(子节点)。
树的关键术语
- 父节点、子节点、兄弟节点:
若节点A
是节点B
的直接前驱,则A
是B
的父节点,B
是A
的子节点;具有相同父节点的节点互称为兄弟节点。 - 节点的度:
节点拥有的子节点数量(即直接后继的个数)。度为0
的节点称为叶子节点(终端节点);度不为0
的节点称为分支节点(非终端节点)。 - 树的度:
树中所有节点的最大度数(反映树的 “分支能力”)。 - 层数与深度:
- 根节点为第
1
层,其子节点为第2
层,依次类推。 - 树的深度(高度)是树中节点的最大层数。
- 根节点为第
- 有序树与无序树:
- 有序树:子树按固定顺序(如左到右)排列,交换子树位置会改变树的结构。
- 无序树:子树无固定顺序,交换子树位置不改变树的结构。
- 森林:
由m(m ≥ 0)
棵互不相交的树组成的集合(可理解为 “多棵树的组合”)。
二叉树:特殊的树结构
二叉树是每个节点最多有两个子节点的树(度 ≤ 2),且子节点有明确的 “左”“右” 之分(即使只有一个子节点,也需区分左 / 右子树)。
(1)二叉树的基本性质
- 第
i
层最多有2^(i-1)
个节点(i ≥ 1
)。 - 深度为
k
的二叉树最多有2^k - 1
个节点(满二叉树的情况)。 - 对任意二叉树,若叶子节点数为
n₀
,度为2
的节点数为n₂
,则n₀ = n₂ + 1
(推导:总边数 = 总节点数 - 1,且边数 = 度为 1 的节点数 + 2× 度为 2 的节点数)。 - 具有
n
个节点的完全二叉树,深度为⌊log₂n⌋ + 1
(⌊x⌋
表示向下取整)。
(2)特殊二叉树
- 满二叉树:
深度为k
且节点总数为2^k - 1
的二叉树(每一层都满,无空缺)。 - 完全二叉树:
深度为k
的二叉树,前k-1
层为满二叉树,第k
层的节点从左到右连续排列(无跳跃)。- 满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树。
(3)二叉树的存储结构
二叉树的存储需体现节点间的父子关系,常见方式有:
存储方式 | 结构定义 | 优点 | 缺点 |
---|---|---|---|
双亲表示法 | 每个节点存储 (数据, 父节点索引) |
便于找父节点(O (1)) | 找子节点需遍历全树(O (n)) |
孩子表示法 | 每个节点存储 (数据, 子节点链表) |
便于找子节点(O (1) 到链表头) | 找父节点需额外存储(如双亲指针) |
孩子兄弟表示法 | 每个节点存储 (数据, 左孩子指针, 右兄弟指针) |
可将任意树转为二叉树处理(左孩子为第一个子节点,右兄弟为同级节点) | 理解稍复杂,需明确左 / 右指针含义 |
图(Graph):多对多的网络结构
图是比树更通用的非线性结构,允许任意节点之间建立关系(多对多),无 “层次” 或 “前驱唯一” 的限制。
图的定义与核心要素
图由顶点(Vertex)和边(Edge)组成,记为 G = (V, E)
:
V
是顶点的非空有限集合(不能为空,至少含一个顶点)。E
是边的有限集合,每条边连接两个顶点(反映顶点间的关系)。
核心特征:
- 顶点间的关系是 “多对多”(任意两个顶点可直接相连)。
- 边可以有方向(有向边)或无方向(无向边)。
图的基本术语
- 有向图与无向图:
- 无向图:边无方向,若顶点
u
和v
相连,则边可表示为(u, v)
(与(v, u)
等价)。 - 有向图:边有方向,从
u
到v
的边记为<u, v>
(u
为起点,v
为终点,与<v, u>
不同)。
- 无向图:边无方向,若顶点
- 顶点的度:
- 无向图中,顶点的度是与该顶点相连的边的数量。
- 有向图中,分为入度(指向该顶点的边数)和出度(从该顶点出发的边数),总度数 = 入度 + 出度。
- 路径与回路:
- 路径:从顶点
u
到v
的顶点序列,相邻顶点由边连接。 - 回路(环):起点与终点相同的路径。
- 路径:从顶点
- 连通图:
- 无向图中,任意两个顶点之间都存在路径,称为连通图;否则为非连通图。
- 有向图中,任意两个顶点
u
和v
之间都存在从u
到v
和从v
到u
的路径,称为强连通图。
图与树的区别
维度 | 树(Tree) | 图(Graph) |
---|---|---|
关系类型 | 一对多(层次关系) | 多对多(网络关系) |
根节点 | 有唯一根节点(无前驱) | 无 “根节点” 概念,顶点地位平等 |
回路 | 无回路(若有回路则不是树) | 可以有回路 |
边的方向 | 子节点方向固定(从父到子) | 边可以无方向或有方向 |
应用场景
- 树:适用于层次结构建模,如文件系统(目录 - 文件)、数据库索引(B + 树)、组织架构图等。
- 图:适用于网络关系建模,如社交网络(用户 - 好友关系)、地图路线(地点 - 道路)、互联网拓扑(节点 - 链路)等
v1.3.10