我需要创建一个将BST转换为字符串的方法,每个子项都以缩进字符作为前缀。
示例:
BinaryTreeSet set=new BinaryTreeSet();
set.add(6);
set.add(4);
set.add(3);
set.add(5);
set.add(9);
set.add(10);
set.add(8);
set.add(0);
System.out.println(set.treeString());
应该产生
=> 6
=> 4
=> 3
=> 0
=> 5
=> 9
=> 8
=> 10
我已经尝试了几个小时,但我没有取得任何进展。
我能得到的最好的是
=> 6
=> 0
=> 3
=> 5
=> 4
=> 8
=> 10
=> 9
使用以下代码:
public String treeString() {
StringBuilder builder = new StringBuilder("=> " + root);
builder.append(System.getProperty("line.separator"));
nodeString(root, builder);
return builder.toString();
}
private void nodeString(BinaryTreeNode node, StringBuilder builder) {
if (node == null) {
return;
}
if (node.left != null) {
nodeString(node.left, builder);
builder.append("=> " + node.left);
builder.append(System.getProperty("line.separator"));
}
if (node.right != null) {
nodeString(node.right, builder);
builder.append("=> " + node.right);
builder.append(System.getProperty("line.separator"));
}
}
不知怎的,我无法弄清楚如何让订单正确...... 我也不知道如何正确地进行缩进。
谢谢!
答案 0 :(得分:0)
尝试在递归builder.append
调用之前放置nodeString
行。如果您还需要在示例输出中进行缩进,则还需要跟踪递归调用中的调用深度。
答案 1 :(得分:0)
这可以解决我们学到的BST定义的问题:
private void nodeString(BinaryTreeNode node, StringBuilder builder, int count) {
if (node == null) {
return;
}
// Left
if (node.left != null) {
for (int i = 0; i < count; i++) { // Adding indent
builder.append(" ");
}
builder.append("=> " + node.left);
builder.append(System.getProperty("line.separator"));
nodeString(node.left, builder, ++count);
--count;
}
// Right
if (node.right != null) {
for (int i = 0; i < count; i++) { // Adding indent
builder.append(" ");
}
builder.append("=> " + node.right);
builder.append(System.getProperty("line.separator"));
nodeString(node.right, builder, ++count);
--count;
}
}