如何使用DFS在树中获取节点的深度?

时间:2014-02-09 21:50:36

标签: tree depth-first-search

我遇到了打印整棵树的问题。当然,遍历很简单:

    public static void printTree(Node head){
    if(head == null) return;
    System.out.println(head.data);
    printTree(head.left);
    printTree(head.right);
}

然而,问题是我应该打印节点的深度及其数据。假设树的根是A并且它的子节点分别是B和C,那么我应该打印如下: 0 A. 1 B 1 C 我怎样才能做到这一点? 我是递归的新手,我不知道如何在递归时跟踪深度。

谢谢!

2 个答案:

答案 0 :(得分:2)

Try adding another parameter to your function to track the depth.

public static void printTree(Node head) {
  printTreeHelper(head, 0);
}

private static void printTreeHelper(Node head, int curDepth) {
  if (head == null) return;
  System.out.println(curDepth + head.data);
  printTree(head.left, depth + 1);
  printTree(head.right, depth + 1);
}

当然,您不需要使用帮助程序,只需使printTree深入了解,但是如果您必须使用该接口,则帮助方法将允许您继续使用它。

答案 1 :(得分:0)

经过一些考虑后,您会注意到节点的深度等于发现节点时的递归深度。因此,您可以在递归函数中添加参数,以指示递归的深度。

public static void printTree(Node head, int depth){
    if(head == null) return;
    System.out.println(depth + " " + head.data);
    printTree(head.left, depth + 1);
    printTree(head.right, depth + 1);
}

当然,您运行的函数为:printTree(node, 0);