[英]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.