递归如何在这种方法下工作?

布伦南·麦戈万

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

    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);

我想知道为什么它不会通过上面的行来检查两个孩子是否都为空。我对二叉树和递归一般都还比较陌生,所以如果有人可以帮助解释我做的任何错误假设,将不胜感激!

卡罗尔·道贝克(Karol Dowbecki)

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

您需要向左和右子节点进行递归,以与检查当前节点相同的方式检查它们,例如,您可以将有问题的行替换为:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章