给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
分析:这道题与二叉树最大深度的区别在于,左右子树都为空,才可以上传这个子树,所以在代码逻辑方面会复杂一些
递归法:
public int minDepth(TreeNode root) {
return sup(root);
}
private int sup(TreeNode Node){
if(Node==null) return 0;
int left = sup(Node.left);
int right = sup(Node.right);
if(Node.left==null&&Node.right!=null){
return right+1;
}
if(Node.left!=null&&Node.right==null){
return left+1;
}
return Math.min(left,right)+1;
}
迭代法:
重点如加粗部分显示,当节点的左右子树都为空时,第一个遇见这种情况的就是最终答案。
public int minDepth(TreeNode root) {
Queue
if(root==null) return 0;
queue.offer(root);
int ret=0;
while(!queue.isEmpty()){
ret++;
int size = queue.size();
while(size>0){
TreeNode tmp = queue.poll();
if(tmp.left!=null) queue.offer(tmp.left);
if(tmp.right!=null) queue.offer(tmp.right);
if(tmp.left==null&&tmp.right==null) return ret;
size—;
}
}
return ret;
}
