【问题标题】:Binary search tree traversal method, in order toString二叉查找树遍历方法,以toString
【发布时间】:2017-12-07 01:31:34
【问题描述】:

我用自己的节点从头开始制作了一个二叉搜索树,当我添加节点以及将树打印到控制台时,它可以完美地运行。但是,我有一段时间让 toString 方法工作。

我将toString 方法更改为MakeString,因为我认为在将可比较类型数据转换为字符串时会感到困惑。我可以让方法返回一个节点或仅以对象形式返回,但不能以字符串形式返回整个树。 printInOrder() 方法完美运行,那为什么我的 MakeString() 方法不行呢?

public void printInOrder(){

    if (left != null) left.printInOrder();

     System.out.println(data);

    if (right != null) right.printInOrder();
}

public String MakeString(){

    String OrderedTree;
    StringBuilder sb = new StringBuilder();
    if (data == null) return "Tree is empty";

    if (left != null) left.MakeString();

     sb.append(data);

    if (right != null) right.MakeString();

【问题讨论】:

  • 请粘贴整个班级。另外,您没有使用left.MakeString() 的结果。
  • 另外,请在这里向我们展示您真正想要的文本输出。无论代码如何,将二叉树打印到控制台都是一种可读的方式,这对我来说似乎是一个挑战。
  • 最后一行不见了,但它只是 return sb.toString();

标签: java binary-search-tree tostring


【解决方案1】:

如果您需要在整个递归过程中保留某些内容,则应将其作为参数传递。如果您想避免必须准备初始调用或在递归之前或之后有其他事情要做,这通常会导致一对方法。

在您的情况下,您使用的是 StringBuilder,它需要在递归之前创建,始终保留,然后在之后使用。

例如:

public String MakeString() {
   if (data == null)
      return "Tree is empty";

   StringBuilder sb = new StringBuilder();

   MakeString(sb);

   return sb.toString();
}

private void MakeString(StringBuilder sb) {
   if (left != null)
      left.MakeString(sb);

   sb.append(data);

   if (right != null)
      right.MakeString(sb);
}

【讨论】:

  • 运行起来更加顺畅!在我今天早上的心态中,我将它打印到一个文件中,然后从文件中读取它。两种方法!完美,谢谢!
猜你喜欢
  • 2021-01-12
  • 1970-01-01
  • 2016-01-09
  • 2012-01-01
  • 2022-11-11
  • 2021-11-17
  • 2021-07-26
  • 1970-01-01
相关资源
最近更新 更多