我试图弄清楚为什么当我在下面的代码中使用if时,控制台输出卡在叶子的无限循环中。
void preOrder(Node root) {
Node n = root;
while(n != null) {
visit(n);
preOrder(n.left);
preOrder(n.right);
}
}
当在叶子上调用preOrder的递归函数时,叶子上没有左孩子,执行不应该在那里停止。
最佳答案
问题是拥有while(n != null)
时,您永远不会将n
重新分配给可能不是null
的东西,因此会遇到无限循环。
您需要一个if
语句,因为您已经有递归调用,该调用将遍历树直到找到叶子:
Node n = root;
if (n != null) {
visit(n);
preOrder(n.left);
preOrder(n.right);
}
关于java - 二叉树的预遍历。如果vs而,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42268887/