我已经实现了以下代码来按级别顺序打印二进制搜索树。
public void printLevelOrder(int depth) {
for (int i = 1; i <= depth; i++) {
printLevel(root, i);
}
}
public void printLevel(BinaryNode<AnyType> t, int level) {
if (t == null) {
return;
}
if (level == 1) {
System.out.print(t.element);
} else if (level > 1) {
printLevel(t.left, level - 1);
printLevel(t.right, level - 1);
}
}
我正在试图弄清楚如何改进我的代码,让它以某种格式打印出来。
作为一个例子,给定一棵树
1
/ \
2 3
/ / \
4 5 6
目前打印方式如下:
123456
我正在寻找如下打印:
Level 0: 1
Level 1: 2 3
Level 2: 4 5 6
答案 0 :(得分:11)
不是在递归函数调用内立即打印值,而是使用字符串来保存值。这样可以更容易地操作输出。
public void printLevelOrder(int depth) {
for (int i = 1; i <= depth; i++) {
System.out.print("Level " + (i-1) + ": ");
String levelNodes = printLevel(root, i);
System.out.print(levelNodes + "\n");
}
}
public String printLevel(BinaryNode<AnyType> t, int level) {
if (t == null) {
return "";
}
if (level == 1) {
return t.element + " ";
} else if (level > 1) {
String leftStr = printLevel(t.left, level - 1);
String rightStr = printLevel(t.right, level - 1);
return leftStr + rightStr;
}
else // you need this to get it to compile
return "";
}
输出
Level 0: 1
Level 1: 2 3
Level 2: 4 5 6