Leetcode 111. Minimum Depth of Binary Tree
题目链接: Minimum Depth of Binary Tree
难度:Easy
题目大意:
求二叉树根节点到任一叶子节点的最小层数。
思路:
思路1(DFS) :
类似于求二叉树最小深度,用递归来实现。注意必须满足是叶子结点,不能是Null。这种方法需要遍历所有的节点。
思路2(BFS):
一层一层地遍历,并记录层数,找到叶子节点时,返回当前所在的层数即可。本题用这种方法要比DFS快。
代码
思路1代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public int minDepth(TreeNode root) {
if(root==null){
return 0;
}
int left=minDepth(root.left);
int right=minDepth(root.right);
if(left==0&&right==0){
return 1;
}
else if(left==0){
return right+1;
}
else if(right==0){
return left+1;
}
else{
return Math.min(left,right)+1;
}
}
}
思路2代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public int minDepth(TreeNode root) {
if(root==null){
return 0;
}
Queue<TreeNode> queue=new LinkedList<>();
queue.offer(root);
int level=1;
while(!queue.isEmpty()){//层级遍历
int size=queue.size();
for(int i=0;i<size;i++){
TreeNode node=queue.poll();
if(node.left==null&&node.right==null){
return level;
}
if(node.left!=null){
queue.offer(node.left);
}
if(node.right!=null){
queue.offer(node.right);
}
}
level++;
}
return level;
}
}