Leetcode:minimum-depth-of-binary-tree
Given a binary tree, find its minimumdepth.The minimum depth is the number of nodes along the shortest path from theroot node down to the nearest leaf node.
解决思路如下:
深度遍历树结点,遇到四种情况
(1)存在左子节点,但不存在右子节点,因为非叶节点,还需要朝左遍历下去,深度加1。
(2)存在右子节点,但不存在左子节点,因为非叶节点,还需要朝右遍历下去,深度加1。
(3)左右子节点均存在,因为是求最小深度,因此求得的应当是左和右子节点当中深度比较小的结点。
(4)是叶结点,返回具体的深度。
代码如下:
int run(TreeNode *root) {
if(root==NULL)
return 0;
return depthnum(root,1);
}
int depthnum(TreeNode* root, int depth)
{
if(root->left && !root->right)
return depthnum(root->left,++depth);
else if(!root->left && root->right)
return depthnum(root->right,++depth);
else if(root->left && root->right)
{
depth++;
return min(depthnum(root->left,depth),depthnum(root->right,depth));
}
else
return depth;
}
网上还提供了还有一种方法,是利用队列按层遍历,解题思路是按层遍历直到找到第一个叶结点,此时的深度必为最小。
代码如下:
int run(TreeNode *root) {
//采用广度优先搜索,或者层序遍历,找到的第一个叶节点的深度即是最浅。
if(! root) return 0;
queue<tree> qu;
tree last,now;
int level,size;
last = now = root;
level = 1;qu.push(root);
while(qu.size()){
now = qu.front();
qu.pop();
size = qu.size();
if(now->left)qu.push(now->left);
if(now->right)qu.push(now->right);
if(qu.size()-size == 0)break;
if(last == now){
level++;
if(qu.size())last = qu.back();
}
}
return level;
}
};