自下而上的树遍历从特定的叶子开始

时间:2017-03-14 07:40:44

标签: java algorithm tree

我正在寻找一种从下到上遍历树的方法,这样我就可以从我选择的特定叶子开始,然后继续到根。

预期输出:在我从sample tree获取的链接here中的示例树图像中,如果我从Y开始指定,算法将返回YXZWVUT。

如果有任何帮助,我将不胜感激。

1 个答案:

答案 0 :(得分:2)

如果我正确理解了这个问题,那就是问题陈述

遍历一个n-ary树,从一个叶子节点开始,直到根节点,这样在遍历所有子节点之前不会遍历任何节点。遍历的第一个节点将始终是叶节点,遍历的最后一个节点将始终是根节点。

这可以通过使用两个递归函数来解决,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);
  }
}