树的遍历

关于树的遍历的问题探索
BFS:
Comparison to BFS: One application of BFS is to compute the shortest-path
distances from a given source vertex s ∈ V
BFS一个应用即为计算任意一个节点到源节点的最短路径的长度

 

BFS的前驱子图生成一颗树
Gπ = (Vπ,Eπ) 其中 Vπ={v∈V:vπ != NIL }U{s} Eπ = {(vπ,v),v∈Vπ-{s} }.

 

 

DFS:常常用来在另一个算法中作为一个子程序使用
定义时间戳的作用就是为了便于使用

 

DFS的前驱子图可能由多棵深度优先搜索树组成的深度优先搜索森林
定义DFS的前驱子图如下:
Gπ = {V,Eπ},其中Eπ = {(vπ,v): v∈V 且v.π != NIL}.

定义颜色:保证每个节点仅在一颗深度优先搜索树中出现,故而所有的深度优先搜索树是disjoint的

白色路径定理:

在一颗有向或无向图的优先搜索森林中,节点v是节点u的后代
当且仅当在时间u.d时存在一条由u到v的全部由白色节点构成的路径

 

边的分类:
树边:深度优先森林Gπ中的边
后向边:将节点连接到其在的深度优先搜索树中的祖宗节点的边,有向图中的自循环也是后向边
前向边:将节点连接到其在的深度优先搜索树中的后代节点(descendant,显然此处非子节点)的边
横向边:其他所有的边(可以是:
同一颗深度优先搜索树中的边:简单理解就是在不同的路径下的节点所连接的边)
不同的深度优先搜索树中的边(比较好理解)

 

利用颜色来理解边的分类显然更加简便:
******首先必须限定搜索为第一次搜索(等下分析原因)******
在第一次搜索的限定条件下:
对于edge(u,v)
若:
1:节点v的颜色为白色:
根据DFS的pseudocode,则必为树边
节点v的颜色为灰色:
就相当对于已经discover的节点v,
有一个在v节点的下方存在一个v节点的后代节点向u建立起一条边显然为后向边
节点v为黑色:必然为前向边或者其他的横向边
(原因:在第一次搜索中后代节点是在祖宗节点之前被涂成黑色的
其他的横向边:可以直接意会)

posted @ 2016-10-11 20:12  come_across_zhou  阅读(147)  评论(0编辑  收藏  举报