## 正西风落叶下长安

π seconds equal to one nano-century.

# [leetcode]111.Minimum Depth of Binary Tree

### 111. Minimum Depth of Binary Tree

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.

recursive method的时间复杂度为（复习一下CRLS再算。）

/**
* Definition for a binary tree node.
* public class TreeNode {
*     int val;
*     TreeNode left;
*     TreeNode right;
*     TreeNode(int x) { val = x; }
* }
*/
public class Solution {
/*
iterative method
*/
public int minDepth(TreeNode root){
if (root == null){
return 0;
}
//BFS
//by BFS, we only need to consider about the first leaf node we encountered. Based on the mechanism of BFS, the first leaf node we encountered is the least deep leaf node in the tree. So we end the search as soon as we reach this leaf node.
int depth = 0;
nodes.offer(root);
while (!nodes.isEmpty()){
//this size is the current number of nodes in the queue.
//it makes use of the feature that at the begining of every iteration, only tree nodes of the same depth are stored in the tree. So we need to iterate "size" times in the later for loop to poll out all the nodes of the given depth while only increase depth for 1.
int size = nodes.size();
++depth;
for (int i = 0; i < size; i ++){
TreeNode current = nodes.poll();
if (current.left == null & current.right == null){
//if current node is a leaf node, we end the BFS, cause this is the minimun depth we need.
return depth;
}
if (current.left != null){
nodes.offer(current.left);
}
if (current.right != null){
nodes.offer(current.right);
}
}

}

return depth;
}

/*
recursive method
*/
public int minDepth(TreeNode root) {
if (root == null){
return 0;
}
if (root.left != null && root.right != null){
//if the current root we are considering have both left and right child, then we will choose the one with the smaller depth.
return Math.min(minDepth(root.left), minDepth(root.right)) + 1;
}
else{
//if the current root we are considering have only 1 child or no child
//1 child: we choose the one with bigger depth, cause we are considering the leaf node, so if there is only one child, we need to go deeper on that node.
//no child, no matter which child we choose, the result is the same, it will return 0 + 1.
return Math.max(minDepth(root.left), minDepth(root.right)) + 1;
}
}
}


yaokai_assultmaster

#### leetcode 104 Maximum Depth of Binary Tree二叉树求深度

2015-05-13 22:16:12

#### Maximum Depth of Binary Tree -- LeetCode

2014-02-22 03:34:51

#### LeetCode（111） Minimum Depth of Binary Tree

2015-10-18 13:09:02

#### LeetCode 111 : Minimum Depth of Binary Tree (Java)

2015-12-01 08:19:46

#### 111. Minimum Depth of Binary Tree [easy] (Python)

2016-05-07 13:43:08

#### Minimum Depth of Binary Tree -- LeetCode

2014-02-22 03:52:34

#### [LeetCode-55]Minimum Depth of Binary Tree

2014-05-22 01:32:24

#### 104. Maximum Depth of Binary Tree [easy] (Python)

2016-05-07 13:21:08

#### 【LeetCode-面试算法经典-Java实现】【111-Minimum Depth of Binary Tree（二叉树的最小深度）】

2015-08-11 07:37:47

#### leetcode-java-111. Minimum Depth of Binary Tree

2016-08-24 10:33:19