题目:
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.
题意:
就是给一棵二叉树,然后求这棵二叉树最小深度。LZ准备采用和上一题中Binary Tree Level Order Traversal I and II中的方法,采用层次遍历来做,类似于图的广度优先遍历,这里有一个小技巧,就是在遍历每一层的时候,采用双层循环来遍历,外层是list的循环,而内层则是关于关于每一层节点入list的个数,并且每层次遍历一层中的某一个节点,那么这一层的长度就减个1,然后当这个list中的节点不为空,如果出现某一层的一个节点是叶子节点,那么直接就break,那么直接就退出,输出这个最小深度。
class TreeNode
{
int val;
TreeNode left;
TreeNode right;
TreeNode(int x)
{
val = x;
}
}
public class Solution
{
public static int minDepth(TreeNode root)
{
LinkedList<TreeNode> list = new LinkedList<TreeNode>();
int depth = 0;
if(root == null)
return 0;
else
{
depth += 1;
list.add(root);
int length = list.size();
while(!list.isEmpty())
{
boolean t = false;
while(length -- > 0)
{
TreeNode node = list.peek();
list.poll();
if(node.left == null && node.right == null)
{
t = true;
break;
}
if(node.left != null)
list.add(node.left);
if(node.right != null)
list.add(node.right);
if(length == 0)
depth += 1;
}
length = list.size();
if(t == true)
{
break;
}
}
return depth;
}
}
public static void main(String args[])
{
TreeNode root = new TreeNode(1);
TreeNode l1 = new TreeNode(2);
TreeNode r1 = new TreeNode(3);
TreeNode l11 = new TreeNode(4);
TreeNode l12 = new TreeNode(5);
root.left = l1;
root.right = r1;
l1.left = l11;
l1.right = l12;
TreeNode r11 = new TreeNode(6);
TreeNode r12 = new TreeNode(7);
r1.left = r11;
r1.right = r12;
//TreeNode r11 = new TreeNode(2);
//r1.left = r11;
System.out.println(minDepth(root));
}
}