求给定二叉树的最小深度。最小深度是指树的根结点到最近叶子结点的最短路径上结点的数量。
1.递归法
class Solution {
public int run(TreeNode root) {
return getMinDepth(root);
}
public int getMinDepth(TreeNode root){
if(root==null){
return 0;
}
if(root.left!=null&&root.right==null){
return getMinDepth(root.left)+1;
}
if(root.left==null&&root.right!=null){
return getMinDepth(root.right)+1;
}
if(root.left==null&&root.right==null){
return 1;
}
return Math.min(getMinDepth(root.left),getMinDepth(root.right))+1;
}
}
2.广度优先遍历(非递归)
import java.util.*;
public class Solution {
public int run(TreeNode root) {
if(root==null){
return 0;
}
if(root.left==null&&root.right==null){
return 1;
}
Queue<TreeNode> queue = new LinkedList();
queue.add(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.add(node.left);
}
if(node.right!=null){
queue.add(node.right);
}
}
level++;
}
return level;
}
}