如果我正确理解了这个问题,这就是问题陈述
遍历一棵 n 叉树,从叶节点开始,一直到根,这样在遍历所有子节点之前不会遍历任何节点。第一个遍历的节点始终是叶节点,最后一个遍历的节点始终是根节点。
这可以通过使用两个递归函数来解决,TraverseUp() 是调用自身的主函数,另一个递归函数 PostOrderTraversal() 调用自身。数组 A 需要通过引用传递,并将包含最终遍历的列表。这是一些伪代码:
TraverseUp(Array *A, Node *n) {
// Add n to A to maintain bottom up nature
if (!n) return;
A.add(n)
// Go to parent
Node *p = n.parent();
if (!p) return;
// For each child of p other than n, do a post order traversal
foreach(Node *c in p.children) {
if (c == n) continue;
PostOrderTraversal(A, c);
}
// When done with adding all p's children, continue traversing up
TraverseUp(A, p);
}
// Standard implementation of post order traversal
PostOrderTraversal(Array *A, Node *n) {
if (!n) return;
foreach(Node *c in n.children) {
PostOrderTraversal(A, c);
A.add(c);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4851 次 |
| 最近记录: |