递归如何在此方法中工作?

时间:2018-04-24 16:46:29

标签: java recursion tree binary

我正在编写一个方法来查找二叉树是否已满,这是我目前所拥有的:

    public boolean full(){
    return fullHelper(this);
}

public boolean fullHelper(BinaryTreeNode<T> node){
    if (node == null){return false;}
    if (node.left == null && node.right == null){return true;}
    if (node.left != null && node.right != null){
        return fullHelper(node);
    }
    return false;
}

您传入的节点可以是根或某个任意节点,它将检查子树是否已满。我的方法一直停留在线上

return fullHelper(node);

我想知道为什么它不会通过它上面的线来检查两个孩子是否都为空。我对Binary Trees和一般的递归都很新,所以如果有人能帮我解释我做的任何错误的假设,我将不胜感激!

2 个答案:

答案 0 :(得分:1)

通过调用return fullHelper(node);,您正在重新处理相同的节点,您启动了该方法。假设设置了node.leftnode.right,这将导致无限递归调用和StackOverflowException

您需要将递归推进到左侧和右侧子节点,以便像检查当前节点一样检查它们,例如你可以用以下内容替换有问题的行:

return fullHelper(node.right) && fullHelper(node.left);

答案 1 :(得分:0)

您要做的是使用递归调用迭代到子节点。例如:

if (node.left != null && node.right != null) {
    return fullHelper(node.left) && fullHelper(node.right);
}