gpt4 book ai didi

java - 二叉搜索树 toString

转载 作者:行者123 更新时间:2023-12-01 09:59:42 24 4
gpt4 key购买 nike

我无法按照教授想要的格式打印二叉搜索树。

他的格式如下:

{(12,10,13),(10,8,11),(8,6,9),(6,4,7),(4,2,5),(2,1,3),(1,*,*),(3,*,*),(5,*,*),(7,*,*),(9,*,*),(11,*,*),(13,*,*)} 

子集中的第一个数字是根节点,左右节点是左右子节点。循环迭代后,左子节点将成为根节点。一切正常,直到我到达子集中仅存在一个节点的位置。它只是打印 (1, *, *) 直到最后,我不知道如何以另一种方式做到这一点。是否可以递归地执行此 toString 方法?

我的代码:

public String toString()
{
if (root == null)
return "{}";
String str = "{";
Node tmp = root;
for (int i = 0; i < size; i++)
{
if (tmp.right != null && tmp.left == null)
str += "("+tmp.data+", "+tmp.right.data+", *)";
if (tmp.left != null && tmp.right == null)
str += "("+tmp.data+", "+tmp.left.data+", *)";
if (tmp.left == null && tmp.right == null)
str += "("+tmp.data+", *, *)";
else
str += "("+tmp.data+", "+tmp.left.data+", "+tmp.right.data+")";

if (tmp.left != null)
tmp = tmp.left;
}

return str += "}";
}

最佳答案

这种方法取决于您如何设置对象,但我通常有一个执行递归操作的 Node 类。如果以这种方式实现,您应该看到像这样的输出

{(12,10,13),(10,8,11),(8,*,*),(11,*,*),(13,*,*)}

对于此示例,我们将有一个方法在 Node 类上返回您的 (data,left,right) 格式。

public class Node<T>

protected T data;
protected Node<T> left;
protected Node<T> right;

public String tuple() {
StringBuilder sb = new StringBuilder("(")
.append(this.data)
.append(",");
sb.append(this.left == null ? "*" : this.left.data)
.append(",");
sb.append(this.right == null ? "*" : this.right.data)
.append(")");
return sb.toString();
}

// other methods
}

然后,递归字符串将在 toString 中实现,如下所示。

    @Override
public String toString() {
StringBuilder sb = new StringBuilder();
String divider = ",";

sb.append(this.tuple()).append(divider);

if (this.left != null) {
sb.append(this.left).append(divider); // recurse left
}

if (this.right != null) {
sb.append(this.right).append(divider); // recurse right
}

if (sb.length() > divider.length() - 1) {
sb.setLength(sb.length() - divider.length());
}

return sb.toString();
}
}

然后,在某些 BinaryTree 类中,您可以拥有

public class BinaryTree<E extends Comparable<? super E>> {

protected Node<E> root;

@Override
public String toString() {
return "{"
+ (root == null ? "" : String.valueOf(this.root)) +
"}";
}

// other methods

}

关于java - 二叉搜索树 toString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36900590/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com