Skip to content

定义Definition

树

施工中 · 内容逐步修订

Tree

连通且无圈的有限简单无向图,也就是任意两点之间只有一条简单路径的图。

形式陈述 ​

一棵树是非空、连通且无圈的有限简单无向图。森林是无圈的有限简单无向图,不要求连通,也允许顶点集为空;森林的每个非空连通分量都是一棵树。

对有 n≥1 个顶点的有限简单无向图 G,以下条件等价:

  • G 连通且无圈,即 G 是树;
  • 任意两个不同顶点之间恰有一条简单路径;
  • G 连通且有 n−1 条边;
  • G 无圈且有 n−1 条边。

第二项把“存在”与“唯一”合在一起;后两项则分别用边数替代其中一半结构要求。下文解释这些替代为何成立,也给出只检查边数会失败的反例。

树本身没有指定根,也没有指定孩子的顺序。选定一个顶点 r 作为根后,才可利用唯一路径定义父节点、孩子和深度:非根节点的父节点是通往根的路径上紧邻它的节点,深度是到根的边数。节点载荷、孩子次序及左右槽位都是进一步增加的结构。

本条称度数为 1 的顶点为叶子。因而至少有两个顶点的树有叶子,而单顶点树的唯一顶点度数为 0。数据结构中也常把“没有孩子”称为叶子;单根树在后一约定下有一片叶子,两种定义应随使用场景区分。

允许无限延伸的有根树 ​

自动机运行与逐层选择的论证还会用到可能无限的有根树。这里直接用有限序列表示节点:记 N<N 为所有有限自然数序列,取非空集合 T⊆N<N,并要求 u∈T 的每个前缀也在 T。空序列 ε 是根;非根节点的父节点由删去最后一项得到,深度为序列长度。u 的孩子是所有属于 T 的 u⌢a,其中 a∈N。若每个节点只有有限多个孩子,就称为有限分支树;不同节点的分支数不必有同一个上界。节点还可另带状态标签,标签相同并不意味着两个节点相同。

任意两点沿父边回到它们的最长共同前缀,再沿另一条前缀链下降,得到唯一有限路径。虽然每个节点只有有限深度,节点总数可以无限,无限分支则是一列每个有限前缀都在 T 中的自然数序列。例如 T={ε,(0),(0,0),…} 只有一条无限分支,每个节点都有一个孩子,所以没有叶子。下文的有限边数公式与叶子存在性仍针对前面的有限树。

König 引理在这个模型中说:有限分支树若有无限多个节点,就有一条无限分支。证明从根开始:它有无限多个后代,而孩子只有有限多个,因此至少一个孩子仍有无限多个后代。每次选其中编号最小的孩子并重复,就得到所需无限链。每层都是有限集,所以“节点无限多”也等价于深度没有统一上界。证明给出存在性;若无法判定某子树是否无限,并不由此得到一个可执行的选路算法。

有限分支条件不能删除。让根对每个正整数 m 都有一个孩子 (m),其后接长度为 m 的零链:节点集为 {ε}∪{(m,0,…,0⏟j 项):m≥1, 0≤j≤m}。这棵树节点无限、深度无界,但进入任何一个孩子后都只能再走有限步,因而没有无限分支。

直觉

树是一种刚好足以连通的结构。任意两点之间都能走到,却没有一条边可以靠绕路替代:删掉任何一条边,原来的一整棵树就分成两块。与之对偶,给树增加一条原来没有的边,新边会和两端之间的唯一路径形成恰好一个圈。

唯一通路也是树上递归有效的原因。把树定根并删除根后,每个孩子恰好落在一个不同的连通分量中;若两个孩子仍能在根之外相连,那条路与两条根边就会组成圈。因此孩子子树的顶点集互不重叠,每个非根子树与外部只通过父边连接。对子树分别计算后沿父边合并,才不会把共享顶点重复当成两个独立部分。

例子与边界

唯一路径如何刻画树 ​

连通性保证任意两点之间至少有一条路。若有两条不同的简单路径,沿它们分开再重合的部分会得到一个圈,与无圈矛盾。因此树中路径唯一。

反过来,若任意两点之间恰有一条简单路径,图当然连通;若存在圈,则圈上两点之间沿两个方向分别前进,可得到两条不同的路径,矛盾。这段论证表明,唯一性不是树的额外算法性质,而是连通与无圈的等价表达。

叶子为什么一定存在 ​

在至少有两个顶点的有限树中,取一条最长简单路径。它的端点至少有一个邻居,即路径中的下一点。若端点还有其他邻居,该邻居若不在路径上,就能延长路径;若已经在路径上,就产生圈。两种情况都不允许,所以路径的两个端点都是叶子。

删除一个叶子及其唯一关联边,剩余部分仍无圈,也仍连通:两个剩余顶点之间的路径不可能把只有一个邻居的叶子当作中间站。因此可由单顶点树开始归纳,得到

|E|=|V|−1.

对有 c 个连通分量的森林,逐分量相加得到 |E|=|V|−c,空森林也满足这个等式。

边数不是独立判据 ​

一个三角形加一个孤立顶点共有四个顶点、三条边,恰好满足 m=n−1,却既不连通也不无圈。要从边数判定树,仍需保留等价刻画中的另一项条件。

为什么“连通加 n−1 条边”足够?连通图若有圈,可删去圈上一条边而不破坏连通性;重复操作会得到一棵包含所有顶点的树,它已有 n−1 条边。原图若也只有这么多边,就没有额外的圈边可删。另一方向,无圈图是森林,m=n−c=n−1 强制 c=1。

同样大小可以有很不同的形状 ​

五顶点路径 1−2−3−4−5 与五顶点星图 K1,4 都是树,都有四条边。直径指所有两点间距离的最大值:路径的两个端点相距 4,而星图中任意两片叶子经过中心只需 2 步,所以二者直径分别为 4 和 2。

以路径端点 1 为根时,最深顶点 5 的深度是 4;以中点 3 为根时,最深处只有 2。这改变了有根树的高度,却没有改变无根树的直径。因此“树有线性条边”不意味着每种树操作都是对数时间,线性链就可能使按父子关系查找退化为线性深度。

二叉树需要区分左、右槽位,并常为递归方便允许空树。其非空、无共享部分忘掉这些额外信息后,才落到本条的无向树模型。一个有向无环图也未必来自树:菱形结构 r→a,r→b,a→t,b→t 没有有向圈,但忽略方向后有圈,且 t 有两个不同的上游路径。

推论与应用

树是极小连通图:每条边都是桥。它也是在给定顶点集上的极大无圈图:增加任意缺失边都会成圈。后一性质对一般森林不成立;两个不同分量之间仍可加边而不成圈。两种极值说法分别对应“删不掉”和“加不了”,不是在比较不同顶点集的大小。

选根后,把偶数深度与奇数深度顶点分在两侧。任一边连接父子,深度相差 1,所以每条边都跨越两侧,证明树是二分图。单顶点树可把另一侧取为空集。

树上动态规划利用的是子树接口,而不只是画成分叉状的外观。例如计算每个子树的节点数,叶子返回 1,内部节点返回 1 加所有孩子结果之和;每条父子边只传递一次结果,总工作量为 O(n)。若共享同一个子问题形成 DAG,直接套用独立子树求和就可能重复计数。

一般连通图可以抽取生成树来保留可达性。最小生成树在所有生成树中优化总边权;从源点得到的最短路树则保留源点到各点的最短距离。两者优化的目标不同,不能仅因输出都为树而互相替代。

参考资料
  • Oscar Levin,Discrete Mathematics: An Open Introduction,第 4 版,开放在线教材,§2.2 Trees:树的刻画、生成树与有根树。

  • Jeff Erickson,Algorithms,Chapters 5、7–8:图遍历、最小生成树及最短路径。

  • Reinhard Diestel,Graph Theory,5th ed.,2017,§1.5:树与森林;进一步阅读。

  • Orna Kupferman and Moshe Y. Vardi,Weak Alternating Automata Are Not That Weak,ACM TOCL 2(3),2001,§2 的前缀闭树与运行树定义(所链作者稿 PDF 第 6 页)。

关系图谱100 个相邻概念 · 3 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
分类位置
类型化关系