我遇到了打印整棵树的问题。当然,遍历很简单:
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 我怎样才能做到这一点? 我是递归的新手,我不知道如何在递归时跟踪深度。
谢谢!
答案 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);