我目前正在编写一种递归方法来返回整个二叉搜索树的最大不平衡。我对递归编程很陌生,所以很难理解。我建立的树的不平衡为 1,但我的方法只返回 0。我确信我的逻辑有缺陷。
我 100% 确定它在该方法的每个步骤中运行“ (root == null){ return 0;} ”。我尝试删除它并进一步定义它,它继续做同样的事情。
这是我目前的方法:
public int getMaxImbalance(){
return Math.abs(getMaxImbalance(root));
}
public int getMaxImbalance (TreeNode<E> root){
if (root == null){
return 0;
}else if(root.left != null && root.right == null){
return 1 + getMaxImbalance(root.left) + getMaxImbalance(root.right);
//adds 1 left is true and right is false
}else if(root.left == null && root.right != null){
return -1 + getMaxImbalance(root.left) + getMaxImbalance(root.right);
//adds -1 left is false and right is true
}
return getMaxImbalance(root.left) + getMaxImbalance(root.right);
//calls itself if both fields are null;
}