1、给定二叉树,求其最小深度
最小深度是从根节点到最近叶节点的最短路径上的节点数。
2、层序遍历实现
利用一个队列实现二叉树的层序遍历,当有一个节点左右孩子都为空时,当前的层数就是二叉树的最小深度
代码如下:
public int run(TreeNode root) {
if(root == null)
return 0;
if(root.left==null && root.right == null)
return 1;
LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(root);
int numbers = 1;//记录每一层的数量
int deep = 0;//当前的深度--每遍历一层就加1 直到遍历到有一个元素没有左右子树
TreeNode node = root;
while(node.left!=null || node.right!=null) {//当左右子树都为空时 结束
int len = 0;//下一层的结点数
for(int i = 0; i < numbers;i++) {
node = queue.poll();
if(node.left != null) {
queue.add(node.left);
len++;
}
if(node.right != null) {
queue.add(node.right);
len++;
}
if(node.left==null && node.right==null)
break;//退出循环后 此时node为第一个左右节点为空节点
}//一层遍历结束
numbers = len;//下一层遍历情况
deep++;
}
return deep;
}