簡體   English   中英

Java BNST toString

[英]Java BNST toString

因此,我正在研究一個實現二進制搜索樹的學校項目。 我必須創建一個toString方法,該方法將所有節點作為字符串返回。 我能夠將其作為一個空白來完成,但是我很難弄清楚如何返回所有節點的字符串。

這是我無效的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);

}

所以我想找出的是如何使它返回樹中所有節點的字符串。 我嘗試了以下操作,但由於它無法輸入遞歸,因此它僅返回第一個節點。

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;

}

任何幫助將不勝感激。 先感謝您。

其實我想我只是想通了。 這是我所做的,並且似乎可以正常工作。

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;

}

明確使用StringBuilder可能會受益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);
}

與原始版本相比,這仍會創建更少的中間字符串實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM