30、给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
返回它的最小深度 2
1、思路
深度优先遍历整棵树:
- 当节点为空返回0;
- 当节点左右孩子都为空时,说明该节点为叶子节点,返回1;
- 当左孩子不为空时,递归求左子树的最小深度,当右孩子不为空时,递归求右孩子的最小深度,返回左右子树中最小深度较小的再加一。
因为某些节点可能左右孩子中有一方为空,而该节点还不是叶子节点,所以将左右孩子节点的最小深度初始为一个极大的数,这样比较左右子树最小深度时,为空节点的子树的最小深度一定大于非空节点的子树。
2、具体实现(java)
public int minDepth(TreeNode root) {
int dep_l=Integer.MAX_VALUE,dep_r=Integer.MAX_VALUE;
if(root==null){
return 0;
}
if(root.left==null&&root.right==null){
return 1;
}
if(root.left!=null){
dep_l=minDepth(root.left);
}
if(root.right!=null){
dep_r=minDepth(root.right);
}
return (dep_l<dep_r?dep_l:dep_r)+1;
}