LeetCode 牛客网
二叉树
题目描述
求给定二叉树的最小深度。最小深度是指树的根结点到最近叶子结点的最短路径上结点的数量。
题目分析
方法一
递归,若为空树返回0;
若左子树为空,则返回右子树的最小深度+1;(加1是因为要加上根这一层,下同)
若右子树为空,则返回左子树的最小深度+1;
若左右子树均不为空,则取左、右子树最小深度的较小值,+1;
下面是Java代码
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类
* @return int整型
*/
public int run (TreeNode root) {
// write code here
if(root == null){
return 0;
}
if(root.left == null){
return run(root.right)+1;
}
if(root.right == null){
return run(root.left)+1;
}
int left = run(root.left);
int right = run(root.right);
return Math.min(left,right)+1;
}
}
方法二
层次遍历,找到第一个叶节点直接返回当前层数即可。
下面是Java代码
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类
* @return int整型
*/
public int run (TreeNode root) {
// write code here
if(root == null){
return 0;
}
if(root.left == null && root.right == null){
return 1;
}
Queue<TreeNode> q = new LinkedList<>();
int next = 0,nextCount = 1 , depth = 1;
q.offer(root);
while(!q.isEmpty()){
TreeNode tmp = q.poll();
++next;
if(tmp.left == null && tmp.right == null){
return depth;
}
if(tmp.left!=null){
q.offer(tmp.left);
}
if(tmp.right!=null){
q.offer(tmp.right);
}
if(next == nextCount){
next = 0;
nextCount = q.size();
++depth;
}
}
return 0;
}
}