【问题标题】:Traverse a tree and print each node and its position遍历一棵树并打印每个节点及其位置
【发布时间】:2014-05-16 00:30:22
【问题描述】:

我已经知道如何遍历二叉树(中序、后序等)但是我遇到的问题是遍历一棵树并打印其节点及其位置。这意味着对于每个节点,我必须打印它的键和位置。我如何才能真正实现做这些事情的算法? (Java 或伪代码)

【问题讨论】:

  • 你在困惑什么?
  • 您需要重新考虑。对不起。
  • 他为什么需要递归?只需在跳转到另一个节点之前、之后或之间放置一个 System.out.printl 命令,并将键和位置作为参数。
  • 职位是什么意思?
  • @Jim 实际上每个节点在树中的位置:这就是问题所在。实际上,节点并没有可变的位置(每个节点包含两个指针(Nodes):left 和 right 和一个 value 键)。考虑到二叉树的结构,我必须以某种方式推断这一点。

标签: tree binary-tree traversal


【解决方案1】:

假设你有一个递归遍历方法(前序深度优先搜索)

void TraverseTree(Node node)
{
    System.out.println("Key: " + node.Key); // print key
    System.out.println("Position: " + node.Position); // print position
    System.out.println(); // print empty row

    TraverseTree(node.Left);
    TraverseTree(node.Right);
}

然后你通过调用来启动它:

TraverseTree(root);

输出将根据您选择的遍历树的方法进行排序 - 深度优先前序、中序、后序或呼吸优先。

键总是必须在节点的某个地方,你可以通过扩展上面的方法来计算位置:

void TraverseTree(Node node, int position)
{
    System.out.println("Key: " + node.Key);
    System.out.println("Position: " + position); // different position print
    System.out.println();

    TraverseTree(node.Left, position + 1);  // different calls
    TraverseTree(node.Right, position + 1);
}

然后像这样调用它开始遍历:

TraverseTree(root, 0); // counting position from 0
TraverseTree(root, 1); // counting position from 1

这个位置又取决于你如何遍历树。

【讨论】:

  • 我认为这不是 OP 想要的。如果position 在每个节点中,有什么大不了的?
  • 我添加了一些东西,也许这会对他有所帮助
猜你喜欢
  • 2011-04-26
  • 1970-01-01
  • 2012-09-23
  • 2020-01-27
  • 2020-12-06
  • 1970-01-01
  • 1970-01-01
  • 2020-03-26
  • 1970-01-01
相关资源
最近更新 更多