所以我正在开发一个实现二元搜索树的学校项目。我必须创建一个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;
}
任何帮助将不胜感激。先感谢您。
答案 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);
}
这仍然会创建比原始版本更少的中间字符串实例。