2.1 树的基本概念
定义 2.1. 连通无圈图称为树,用T表示。树中度数为1的顶点称为树叶,度数大于1的顶点称为分支点,边称为树枝。每个连通片都是树的非连通图称为森林。孤立点称为平凡树。
定理 2.1. 设G=(V(G),E(G))是简单无向图,则以下命题等价:
- G是树。
- G的任意两个顶点之间有且仅有一条轨道。
- G不含图,且ε(G)=ν(G)−1。
- G是连通图,且ε(G)=ν(G)−1。
- G是连通图,且山区任意一条边都不连通。
- G不含圈,且任意添加一条边后恰好含一个圈。
定理 2.2. 任一平凡树T至少有两片树叶。
定义 2.2. 设图G=(V,E)是连通图,任取v∈V,称l(v)=max{dist(u,v∣u∈V}是顶点v的离心率,称r(G)=min{l(v)∣v∈V}是图G的半径。离心率恰好等于半径(即l(v)=r(G))的顶点v,称为G的一个中心点。G中全体中心点的集合称为G的中心。
2.2 生成树
定义 2.3. 如果图G的生成子图T是树,则称T是G的一棵生成树;如果T是森林,称它为G的生成森林。生成树的边称为树枝,图G中非生成树的边称为弦。T相对于G的补图TGc称为G的余树。TGc是G的生成子图,其边集合由G中不在T上的边组成。
定理 2.3. 每个连通图都有生成树。
- 推论 2.1. 若G是连通图,则ε(G)≥ν(G)−1。
- 推论 2.2. G是连通图的充分必要条件是G有生成树。
定理 2.4. (Cayley)设G是连通图,e=uv∈E(G)且不是环,则τ(G)=τ(G−e)+τ(G⋅e)。其中,G⋅e是G中收缩掉边e后得到的图(收缩图)。
定理 2.5. τ(Kn)=nn−2
2.3 最小生成树
定义 2.4. 给定连通边权图G=(V(G),E(G),ω),其中,ω:E(G)→R+为边权函数,G的生成树T的权定义为W(T)=∑e∈E(T)ω(e),权最小的生成树称为G的最小生成树。
算法 2.1. Kruskal算法。**输入:**加权图G=(V(G),E(G),ω),ν=∣V(G)∣。输出:G的一棵生成树的边子集{e1,e2,...,eν−1}。
- 从E(G)中选权最小的边e1;
- 若已经选定边{e1,e2,...,ei},则从E(G)−{e1,e2,...,ei}中选出边ei+1,使得(i)边导出子图[{e1,e2,...,ei}]不含圈;(ii)在满足(i)的前提下,ω(ei+1)=mine∈E(G)−{e1,e2,...,ei}ω(e)。
- 反复执行第二步直到选出eν−1为止。
定理 2.6. 由Kruskal算法得到的生成子图T∗=(V(G),{e1,e2,...,ei})是最小生成树。
算法 2.2. Prim算法。输入:边权图G=(V(G),E(G),ω),ν=∣V(G)∣。输出:G的一棵生成树的边子集E′。
- 从V(G)中任意选取一个顶点s,令V′=s,E′=∅;
- 在(V′,V′)中选择一条最小的边uv,其中u∈V′,v∈V′。令V′=V′∪{v},E′=E′∪{uv};
- 反复执行第二步直到∣V′∣=ν或∣E′∣=ν−1为止。
定理 2.7. 由Prim算法得到的图T∗=(V′,E′)是最小生成树。
**破圈法:**区别于避圈法(Kruskal算法和Prim$算法)。参考习题16。
2.4 二叉树及其应用
定义 2.5. 有根树是指定一个顶点作为根,并且每条边的方向都离开根的有向树。设T是一棵非平凡的有根树,任给vi,vj∈V(T),若(vi,vj)∈E(T),则称vi为vj的父亲,vj是vi的儿子;同父之子称为兄弟;若从vi到vj有有向轨道,vi为vj的祖先,vj是vi的后代。
定义 2.6. 在有根树中仅有一个顶点入度为0,其余顶点的入度均为1。有根树T中入度为0的顶点就是根,入度为1出度为0的顶点称为树叶,入度为1出度不为0的顶点称为内点,内点和根统称为分支点。从根到T的任一顶点v到距离称为v的深度L(v),深度的最大值称为树高h(T)。
定义 2.7. 设T是一棵有根树,若每个顶点的孩子都从左到右规定了次序,则称T是有序树。
定义 2.8. 设T是一棵有根树,
- 若T的每个分支点至多有r个儿子,则称T是r叉树;
- 若T的每个分支点都恰好有r个儿子,则称T是r叉正则树;
- 若T是r叉正则树且每个树叶的深度都是树高,则称T是r叉完全正则树;
- 若T是r叉树且为有序树,则称T是有序r叉树;
- 若T是r叉正则树且为有序树,则称T是有序r叉正则树;
- 若T是r叉完全正则树且为有序树,则称T是有序r叉完全正则树。
定理 2.8. 二叉树有以下性质:
- 第i层的顶点数最多是2i;
- 深度为h的二叉树最多有2h+1−1个顶点;
- 设二叉树出度为2的顶点数为n2,树叶数为n0,则有n0=n2+1;
- 包含n个顶点的二叉树的高度至少为log(n+1)−1。