我试图弄清楚为什么当我在下面的代码中使用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/

10-10 05:53