Java 递归在这个方法中是如何工作的?
我正在写一个方法来查找二叉树是否已满,以下是我目前所掌握的:Java 递归在这个方法中是如何工作的?,java,recursion,tree,binary,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 tr
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;
}
我想知道为什么它不会通过它上面的行来检查两个孩子是否都是空的。一般来说,我对二叉树和递归都是相当陌生的,所以如果有人能帮助解释我所做的任何错误假设,我将不胜感激 通过调用
返回fullHelper(节点)代码>您正在重新处理启动该方法的同一节点。假设同时设置了node.left
和node.right
,这将导致无限递归调用和StackOverflowException
您需要将递归推进到左侧和右侧子节点,以与刚才检查当前节点的方式相同的方式检查它们,例如,您可以将有问题的行替换为:
return fullHelper(node.right) && fullHelper(node.left);
您要做的是使用递归调用迭代子节点。例如:
if (node.left != null && node.right != null) {
return fullHelper(node.left) && fullHelper(node.right);
}
你说它“卡住”是什么意思?你在同一个BinaryTreeNode
上调用递归方法,所以它永远不会前进,最终抛出stackoverflower错误
@Carcigenicate我得到一个堆栈溢出错误。另外,我该如何遍历树呢?我认为代码在其他方面也是错误的。只要一个节点没有一个子节点,任何树都会返回true。我添加了一个height方法,确保每个子节点的高度都相同,但效果很好!@karol说的:)这奏效了,谢谢!作为后续问题,使用node.right和node.left将允许您遍历树,对吗?我知道仅使用node将继续调用同一个节点,但使用.left和.right将继续访问子节点,只要它们存在?使用当前的如果(node.left!=null和&node.right!=null)
语句是,当它们不为null时,将检查right
和left
。
if (node.left != null && node.right != null) {
return fullHelper(node.left) && fullHelper(node.right);
}