数据结构

图论中的有根树

从你电脑里的文件到这个页面的 HTML,有根树默默地组织着数字世界。下面就来看看它们是如何工作的。

阅读需要 9 分钟 更新时间:2026年6月 中级水平
Mohammed Islam Hadjoudj
Mohammed Islam Hadjoudj
Expert Operations Research Engineer

1. 什么是有根树?

在图论中,是一个无环的连通图。有根树就是其中选定了一个特殊顶点作为的树。这一个选择就让其他所有节点有了清晰的"上"(朝向根)与"下"(远离根)之分,把一棵普通的树变成了一种层级结构。

一个有用的事实:含 n 个节点的树总是恰好有 n - 1 条边,且任意两个节点之间恰好存在一条路径,不多不少。

2. 关键术语

一棵有根树,根 A 位于深度 0,标注了父节点与子节点、共享同一父节点的兄弟节点、没有子节点的叶节点、一个内部节点、深度 0 到 3 以及高度为 3
所有术语浓缩为一张图:根位于深度 0,边向下连到子节点,叶子(绿色)没有子节点,兄弟节点共享同一个父节点,而树的高度就是从根到叶子的最长路径。

3. 有根树与无根树

无根树只描述哪些节点相连,没有上下之分。一旦你选定一个根,同一组边便有了方向:现在可以把边理解为从根指向外侧,于是有根树就像一种特殊的有向图。选择不同的根,会从同一棵底层树得到不同的层级结构。

同一棵四条边的树以三种方式展示:无根且没有层级、以 P 为根形成一条长链、以 R 为根形成宽而浅的层级
同一棵无根树,两个不同的根。相同的四条边,以 P 为根时变成一条长链,以 R 为根时变成宽而浅的层级。

看树动起来

构建一棵有根树,观看 DFS 和 BFS 遍历逐个节点点亮。深度、高度和父子关系会一下子变得清晰。

打开可视化工具

4. 有根树如何表示

在代码中存储有根树有三种常见方式:

5. 有根树的类型

6. 遍历有根树

访问每个节点称为遍历,主要有两大类:

如果这听起来很熟悉,那是因为它们正是用于一般图的相同策略。参见我们关于 BFS 与 DFS 的深入讲解。

一棵二叉树及其四种遍历顺序:前序、中序(结果是排好序的)、后序,以及层序 BFS
同一棵二叉树的四种经典遍历。DFS 分为前序、中序和后序;BFS 则逐层访问。在二叉搜索树上,中序遍历会方便地按排序顺序返回各节点。

7. 现实应用

常见问题

有根树和无根树有什么区别?

无根树只说明哪些节点相连。有根树指定一个节点为根,从而赋予树一种带有父子关系、有明确顶端的层级结构。

树的深度和高度有什么区别?

深度是从根到某个特定节点的距离(根的深度为 0)。高度是从某节点到其最深叶子的距离;树的高度即根的高度。

有根树是有向图吗?

可以这样看待。一旦选定了根,每条边都隐式地从根指向外侧,使每个非根节点恰好有一个父节点。

含 n 个节点的树有多少条边?

恰好 n - 1 条。再添加任何一条边都会形成环,而树按定义是无环的。

进一步探索

种出你自己的树

理解有根树最快的方法就是亲手构建并遍历一棵。创建节点、设定根,然后看着结构活起来。

打开可视化工具