递归toString二叉树输出

时间:2016-01-27 18:55:31

标签: java recursion binary-tree binary-search-tree tostring

所以我希望我的二进制树的打印输出读起来像[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;
    }

3 个答案:

答案 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的一些更改获得了类似的结果。感谢大家的帮助!