我已经知道如何遍历二叉树(按顺序,后序等)但是我遇到的问题是遍历树并打印其节点及其位置。这意味着我必须为每个节点打印其键和位置。我怎样才能真正实现一个执行此操作的算法? (用Java或伪代码)
答案 0 :(得分:0)
让我们假设您有一个递归遍历方法(预订深度优先搜索)
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);
输出将根据您选择的遍历树的方法进行排序 - 深度优先预订,依次,后序排序,首先是呼吸。
密钥总是必须在Node的某处,您可以通过扩展上面的方法来计算位置:
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
然后,这个位置又取决于你如何遍历树。