Java 图的前序/后序遍历?

Java 图的前序/后序遍历?,java,data-structures,traversal,depth-first-search,Java,Data Structures,Traversal,Depth First Search,这是DFS预订单顶点编号,对应于DFS树的预订单遍历;第二个是后订单编号,对应于DFS树的后订单遍历 有人能解释一下我们是如何得到这种排序的吗?因为我只知道如何在二叉树上应用预排序或后排序。多谢各位 试着用你的例子一步一步地遵循这个伪代码,你就会理解这个算法,它非常简单而且简单: Initialize clock to 1 PreVisit(v): pre[v] <- clock clock <- clock + 1 PostVisit(v): post

这是DFS预订单顶点编号,对应于DFS树的预订单遍历;第二个是后订单编号,对应于DFS树的后订单遍历

有人能解释一下我们是如何得到这种排序的吗?因为我只知道如何在二叉树上应用预排序或后排序。多谢各位


试着用你的例子一步一步地遵循这个伪代码,你就会理解这个算法,它非常简单而且简单:

Initialize clock to 1

PreVisit(v):
    pre[v] <- clock
    clock <- clock + 1

PostVisit(v):
    post[v] <- clock
    clock <- clock + 1

Explore(v):
    visited[v] = true
    PreVisit(v)
    for all u adj to v:
        if u is not visited:
            Explore(u)
    PostVisit(v)
将时钟初始化为1
前文(五):

你知道DFS是如何工作的吗?如果预订单为1,请选择具有最小权重的根节点,即在示例中为1。。然后2.搜索并选择另一个节点,其权重小于除父节点外的所有其他节点,且其不应形成循环,并重复步骤2,直到覆盖所有顶点。DFS在任何图形上的工作方式与(二叉)树类似-主要区别在于算法必须明确防止循环图中的循环如果节点值遵循某些已定义的规则,则可以隐式地处理此问题。您还应该为访问前和访问后的号码定义不同的时钟