二进制搜索树遍历方法,以toString

时间:2017-12-07 01:31:34

标签: java binary-search-tree tostring

我用自己的节点从头开始创建了一个二叉搜索树,当我添加节点和打印树以便控制台时,它完美地运行。但是,我有一段时间让int main() { if (SDL_Init(SDL_INIT_VIDEO) != 0) { return 1; } auto quit_scope_guard = scopeGuard([] { SDL_Quit(); }); std::unique_ptr<SDL_Window> win(SDL_CreateWindow("asdf", 100, 100, 640, 480, SDL_WINDOW_SHOWN)); if (!win) { // ~quit_scope_guard will call SDL_Quit(). return 1; } // ~win will call SDL_DestroyWindow(win.get()). // ~quit_scope_guard will call SDL_Quit(). return 0; } 方法正常工作。

我将toString方法更改为toString,因为我认为将可比类型数据转换为字符串时会感到困惑。我可以得到方法返回一个节点或只是以对象形式,但从来没有整个树以字符串形式。 MakeString方法效果很好,为什么我的printInOrder()方法无法获胜?

MakeString()

1 个答案:

答案 0 :(得分:2)

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

在你的情况下,你使用的是需要在递归之前创建的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);
}
相关问题