您的位置:首页 > 其它

【leetcode】111. Minimum Depth of Binary Tree

2016-06-21 14:21 197 查看
一、题目描述

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;
}
}

代码2:使用队列进行BFS
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: