一、题目描述
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.
题目解读:给了一棵二叉树,求最小深度。最小深度是从根节点到最近的叶子节点的距离。注意一定是要到叶子节点。
思路:递归方法
c++代码(12ms,15.10%)
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int minDepth(TreeNode* root) {
if(root==NULL)
return 0;
else if(root->left==NULL && root->right == NULL)
return 1;
else{
if(root->left == NULL)
return minDepth(root->right)+1;
else if(root->right == NULL)
return minDepth(root->left)+1;
else
return min(minDepth(root->left), minDepth(root->right))+1;
}
}
};
public class Solution {
public int minDepth(TreeNode root) {
if (root == null)
return 0;
int depth = 1;
Queue<TreeNode> queue = new LinkedList<TreeNode>();
TreeNode temp,magic = new TreeNode(0);
queue.add(root);
queue.add(magic);
while(!queue.isEmpty()){
temp = queue.poll();
if(temp.equals(magic)){
if(!queue.isEmpty()){
depth++;
queue.add(magic);
}
continue;
}
if(temp.left == null && temp.right == null)
return depth;
if(temp.left != null)
queue.add(temp.left);
if(temp.right != null)
queue.add(temp.right);
}
return depth;
}
}
public int minDepth(TreeNode root) {
if(root==null) return 0;
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(root);
TreeNode endOfLevel = root;
int depth = 1;
while( !queue.isEmpty() ) {
TreeNode node = queue.remove();
if(node.left==null && node.right==null) return depth;
if(node.left!=null) queue.add(node.left);
if(node.right!=null) queue.add(node.right);
if(node == endOfLevel) {
endOfLevel = node.right==null ? node.left : node.right;
depth++;
}
}
return depth;
}