Algorithm 我对这个图的后序遍历正确吗?

Algorithm 我对这个图的后序遍历正确吗?,algorithm,graph,tree,traversal,postorder,Algorithm,Graph,Tree,Traversal,Postorder,我正在尝试实现一个需要后序遍历的算法。这是我的图表(摘自第8页): 当我尝试对此进行后序遍历时,得到的顺序是: [3, 2, 1, 5, 4, 6] 这个顺序的问题是算法不能按这个顺序工作。这是我用来获取它的代码(伪代码): 后序正确吗?我想您对二叉树的后序遍历感到困惑 图中的后序遍历是不同的 图中的后序–如果我们按照DFS遍历上次访问顶点的顺序列出顶点,则该顺序称为后序 假设您的根节点是6,则所提到的顺序给出了正确答案 检查以下关于如何生成邮政订单遍历列表的示例: 通过1: 名单:[] 6

我正在尝试实现一个需要后序遍历的算法。这是我的图表(摘自第8页):

当我尝试对此进行后序遍历时,得到的顺序是:

[3, 2, 1, 5, 4, 6]
这个顺序的问题是算法不能按这个顺序工作。这是我用来获取它的代码(伪代码):


后序正确吗?

我想您对二叉树的后序遍历感到困惑

图中的后序遍历是不同的

图中的后序–如果我们按照DFS遍历上次访问顶点的顺序列出顶点,则该顺序称为后序

假设您的根节点是
6
,则所提到的顺序给出了正确答案

检查以下关于如何生成邮政订单遍历列表的示例:

通过1:

名单:[]

6->5->1->2->3(现在
节点3
没有未访问的相邻节点)

名单:[3]

第二关:

6->5->1->2

节点2
没有未访问的相邻节点

名单:[3,2]

第三关:

6->5->1

节点1
没有未访问的相邻节点

名单:[3,2,1]

第4关:

6->5

节点5
没有未访问的相邻节点

名单:[3,2,1,5]

通过第5关:

6->4

节点4
没有未访问的相邻节点

名单:[3,2,1,5,4]

通过第6关:

节点6
没有未访问的相邻节点

名单:[3,2,1,5,4,6]

重要注意事项:

  • 当我们使用DFS时,根据邻接列表中节点的顺序,可能有多条路径

  • 可能是正确的顺序:

  • [3,2,1,5,4,6]
  • [1,3,2,4,5,6]
  • [3,1,2,4,5,6]
  • [1,2,3,4,5,6]

  • 是的,算法的后序遍历是正确的。预期的输出确实与您提供的一样

    您的困惑可能来自这样一个事实:图形不是二叉树,甚至不是树。这是一个有向图

    一般情况下,后序意味着您首先在第一个输出边后面的节点上执行后序遍历,然后在其下一个输出边后面的节点上执行后序遍历,……等等,并且只有在遍历了所有输出边之后,才会输出节点本身

    因为在节点1,您还没有到达终点,并且仍然可以到达2,然后从那里到达3,所以在输出任何内容之前,您需要遵循这些边。只有这样才能回溯

    以下是您实现的算法,以供参考:

    def postorder(根目录、外列表、子目录、已访问):
    已访问[根]=真
    对于child中的child[根]:
    如果未访问[儿童]:
    邮购(儿童、外名单、儿童、访问)
    out\u list.append(根目录)
    儿童=[
    [],#节点0的虚拟
    [2],     # 1
    [1,3],   # 2
    [2],     # 3
    [2,3],   # 4
    [1],     # 5
    [5,4]    # 6 
    ]
    节点=[]
    后序(6,节点,子节点,[False]*len(子节点))
    打印(节点)#[3,2,1,5,4,6]
    
    您的算法将生成您提供的列表。这也是正确的输出。你的问题是什么?你写“这个算法不能按这个顺序工作”:好吧,它确实给出了这个顺序作为输出。。。或者你指的是另一种算法?你的根是什么?@DeepakTatyajiAhire--6@trincot--我正在实现的算法不能按照这个顺序工作……你说的是哪种算法?
    function PostOrder(root, out_list) {
        root.visited = true
        for child in root.Children {
            if not child.visited {
                PostOrder(child, out_list)
            }
        }
        out_list.append(root)
    }