所以我希望我的二进制树的打印输出读起来像[A B C D E F],但我一直有一个额外的空格,我不能使用subString来删除它。解决这个问题的最佳方式是什么?
public String toStringInOrder() {
output = "";
output += printInOrder(root);
if(output.length() < 1) {
return "[]";
} else {
return "[" + output.substring(0, output.length() - 1) + "]";
}
}
private String printInOrder(Node current) {
if(current != null) {
printInOrder(current.left);
output += current.value + " ";
printInOrder(current.right);
}
return output;
}
答案 0 :(得分:0)
如果您唯一关心的是删除最后的额外空间,则可以替换:
return "[" + output.substring(0, output.length() - 1) + "]";
使用:
return "[" + output.Trim() + "]";
我可能采取的另一种方法是使用有序值填充List,然后您可以更好地控制如何将有序值格式化为字符串。
答案 1 :(得分:0)
如果您不能使用子串或类似物,请执行&#34;寻找最大节点&#34;搜索(廉价日志(n)操作),保存该节点并在输出添加中添加if语句,以检查必须添加其信息的节点是否不是最后一个。在这种情况下,添加没有空格的值。
Node last = max(root);
private Node max(Node x){
if (x.right == null)
return x;
return max(x.right);
}
private String printInOrder(Node current) {
if(current != null) {
printInOrder(current.left);
if(!current.equals(last))
output += current.value + " ";
else
output += current.value;
printInOrder(current.right);
}
return output;
}
答案 2 :(得分:0)
我在一些图表和反复试验后发现了我需要的答案。
private String printPreOrder(Node current) {
if (current != null) {
output += current.value;
if (current.left != null) output += " ";
printPreOrder(current.left);
if (current.right != null) output += " ";
printPreOrder(current.right);
}
return output;
}
对inOrder和postOrder的一些更改获得了类似的结果。感谢大家的帮助!