ILo*_*oon 7 java binary-search-tree
我已实现以下代码以按级别顺序打印二叉搜索树.
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我试图弄清楚如何改进我的代码,让它以某种格式打印出来.
举个例子,给一棵树
1
/ \
2 3
/ / \
4 5 6
Run Code Online (Sandbox Code Playgroud)
目前它打印如下:
123456
Run Code Online (Sandbox Code Playgroud)
我正在寻找它打印如下:
Level 0: 1
Level 1: 2 3
Level 2: 4 5 6
Run Code Online (Sandbox Code Playgroud)
Azi*_*ziz 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 "";
}
Run Code Online (Sandbox Code Playgroud)
输出:
Level 0: 1
Level 1: 2 3
Level 2: 4 5 6
Run Code Online (Sandbox Code Playgroud)