遍历树并打印每个节点及其位置

时间:2014-05-15 16:15:26

标签: tree binary-tree traversal

我已经知道如何遍历二叉树(按顺序,后序等)但是我遇到的问题是遍历树并打印其节点及其位置。这意味着我必须为每个节点打印其键和位置。我怎样才能真正实现一个执行此操作的算法? (用Java或伪代码)

1 个答案:

答案 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

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