2014-02-09 45 views
0

我遇到了打印出整棵树的问题。当然,遍历很简单:如何使用DFS获取树中节点的深度?

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
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采取深度,但以防万一那就是你必须使用接口,辅助方法可以让您继续使用它。

+0

+1:

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); } 

当然,你运行的功能。 – stuhlo

0

经过一些考虑,您可以注意到节点的深度等于发现节点时的递归深度。因此,您可以将参数添加到指示递归深度的递归函数中。对于提的辅助方法printTree(node, 0);