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.
给定二叉树,求其最小深度。最小深度是从根节点到最近的叶节点沿最短路径的节点数。
思路
- 递归 ,如果为空,返回0;如果左子树为空,返回右子树最小深度+1;如果右子树为空,返回左子树最小深度+1;否则,返回左右子数深度较小的那个+1;
// 递归
class Solution {
public:
int run(TreeNode *root) {
if(root==nullptr)
return 0;
if(root->left==nullptr)
return run(root->right)+1;
if(root->right==nullptr)
return run(root->left)+1;
int lf=run(root->left);
int rt=run(root->right);
return lf<rt ? (lf+1):(rt+1);
}
};
- 广度优先搜索,找到的第一个叶子节点即为所求值;
class Solution {
public:
int run(TreeNode *root) {
if(root==nullptr)
return 0;
queue<TreeNode*> q;
int layer=1;//当前层数
int nextcount=0;//下一层的节点数
int count=1;//当前层已经遍历过的节点数
q.push(root);
while(!q.empty())
{
TreeNode* cur=q.front();
q.pop();
count--;
if(cur->left==nullptr && cur->right==nullptr)
return layer;
if(cur->left!=nullptr)
{
q.push(cur->left);
nextcount++;
}
if(cur->right!=nullptr)
{
q.push(cur->right);
nextcount++;
}
if(count==0)
{
count=nextcount;
nextcount=0;
layer++;
}
}
return layer;
}
};