题目描述
Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.
该题目的解法就是寻找离根结点最近的叶子节点
解法1(递归):Java
【主要在递归时要注意,当有的节点有一个子树为空时,不是叶子节点要继续寻找】
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public int run(TreeNode root) {
if(root == null)
return 0;
if(root.left == null && root.right == null)
return 1;
if(root.left == null)
return run(root.right)+1;
if(root.right == null)
return run(root.left)+1;
return Math.min(run(root.left),run(root.right))+1;
}
}
解法二(非递归法):Java
递归的方法虽然简单,但是相较于难于理解。非递归的方法是使用层序遍历的方式,使用FIFO的queue。首先需要current来记录队列中的每一层的结点的个数,next记录要遍历的下一层的结点的个数,当current为0的时候,表明这一层已经遍历完成,height要加一。当遍历到叶子结点的时候,即左右子节点均为空的时候,跳出循环。代码如下:
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
import java.util.Queue;
import java.util.LinkedList;
public class Solution {
public int run(TreeNode root) {
if(root == null)
return 0;
if(root.left == null && root.right == null)
return 1;
int height = 0;
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(root);
int current = 1;
int next = 0;
while(!queue.isEmpty()){
TreeNode node = queue.poll();
current--;
if(node.left == null && node.right == null){
height++;
break;
}
if(node.left != null)
{
queue.add(node.left);
next++;
}
if(node.right != null)
{
queue.add(node.right);
next++;
}
if(current == 0)
{
height++;
current = next;
next = 0;
}
}
return height;
}
}