Java BNST toString

时间:2018-02-22 05:22:31

标签: java string testing return binary-search-tree

所以我正在开发一个实现二元搜索树的学校项目。我必须创建一个toString方法,将所有节点作为字符串返回。我能够做到这一点,但是我很难弄清楚如何返回所有节点的字符串。

继承我工作的void toString函数。

public void toString(TreeNode node)
{

        if (node == null) {
            return;
        }

        if (node.deleted == true) {
            System.out.print("*" + node.key + " ");
        } 
        else {
            System.out.print(result += node.key + " ");
        }

        toString(node.leftChild);
        toString(node.rightChild);

}

所以我想弄清楚的是如何让它返回树中所有节点的String。我尝试了以下但它只返回第一个节点,因为它无法进入递归。

public String toString(TreeNode node)
{
    String result="";

        if (node == null) {
            return "";
        }

        if (node.deleted == true) {
            result += "*" + node.key + " ";
        }
        else {
            result += node.key + " ";
        }

        toString(node.leftChild);
        toString(node.rightChild);

        return result;

}

任何帮助将不胜感激。先感谢您。

2 个答案:

答案 0 :(得分:0)

其实我觉得我只是想通了。这就是我所做的,它似乎正在起作用。

public String toString(TreeNode node)
{
    String result="";

        if (node == null) {
            return "";
        }

        if (node.deleted == true) {
            result += "*" + node.key + " ";
        }
        else {
            result += node.key + " ";
        }

        result += toString(node.leftChild);
        result += toString(node.rightChild);

        return result;

}

答案 1 :(得分:0)

此代码可能会从显式使用StringBuilder中受益,这可以避免创建中间字符串实例:

public String toString(TreeNode node) {
    return appendTo(node, new StringBuilder()).toString();
}
private static StringBuilder appendTo(TreeNode node, StringBuilder sb) {
    if(node == null) return sb;
    if(node.deleted) sb.append('*');
    return appendTo(node.rightChild,
                        appendTo(node.leftChild, sb.append(node.key).append(' ')));
}

但即使使用字符串连接,也不需要那么复杂:

public String toString(TreeNode node) {
    if(node == null) return "";
    return (node.deleted? "*": "") + node.key + ' '
      + toString(node.leftChild) + toString(node.rightChild);
}

这仍然会创建比原始版本更少的中间字符串实例。