Algorithm 我对这个图的后序遍历正确吗?
我正在尝试实现一个需要后序遍历的算法。这是我的图表(摘自第8页): 当我尝试对此进行后序遍历时,得到的顺序是:Algorithm 我对这个图的后序遍历正确吗?,algorithm,graph,tree,traversal,postorder,Algorithm,Graph,Tree,Traversal,Postorder,我正在尝试实现一个需要后序遍历的算法。这是我的图表(摘自第8页): 当我尝试对此进行后序遍历时,得到的顺序是: [3, 2, 1, 5, 4, 6] 这个顺序的问题是算法不能按这个顺序工作。这是我用来获取它的代码(伪代码): 后序正确吗?我想您对二叉树的后序遍历感到困惑 图中的后序遍历是不同的 图中的后序–如果我们按照DFS遍历上次访问顶点的顺序列出顶点,则该顺序称为后序 假设您的根节点是6,则所提到的顺序给出了正确答案 检查以下关于如何生成邮政订单遍历列表的示例: 通过1: 名单:[] 6
[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]
重要注意事项:
是的,算法的后序遍历是正确的。预期的输出确实与您提供的一样 您的困惑可能来自这样一个事实:图形不是二叉树,甚至不是树。这是一个有向图 一般情况下,后序意味着您首先在第一个输出边后面的节点上执行后序遍历,然后在其下一个输出边后面的节点上执行后序遍历,……等等,并且只有在遍历了所有输出边之后,才会输出节点本身 因为在节点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)
}