我用自己的节点从头开始创建了一个二叉搜索树,当我添加节点和打印树以便控制台时,它完美地运行。但是,我有一段时间让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()
答案 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);
}