力扣:二叉树的最小深度java
和求二叉树最大深度最大的不同就是要处理节点的左右孩子有一个为空时,只返回不空的高度+1。否则会导致左右孩子有一个为空时,返回空节点的长度,就与题目不符合了。
流程:
选择为后序遍历
递归三部曲:
设置返回值和参数(返回为高度,参数为根节点)
结束条件,节点为空时,返回长度0
递归逻辑,调用递归函数,计算左右孩子的高度,判断左节点为空则返回右子树高度+1,右节点为空则返回左节点高度+1。左右孩子都不为空,返回最小的高度+1
代码:
class Solution {
public int minDepth(TreeNode root) {//主函数
return getMinDeep(root);//递归调用函数
}
public int getMinDeep(TreeNode cur){//获取最小深度,参数为根节点,返回长度
if(cur==null) return 0;//结束条件
int lLen = getMinDeep(cur.left);//获取左右孩子的高度
int rLen = getMinDeep(cur.right);
if(cur.left == null&&cur.right != null){//判断左右孩子其中一个为空的情况。如果不判断,会返回空节点高度,则输出错误。
return 1+rLen;
}else if(cur.left != null&&cur.right == null){
return 1+lLen;
}
return 1+(lLen>rLen?rLen:lLen);//左右孩子都不为0,选择小的+1返回
}
}