非最优解,仅学习记录。
算法思路:
迭代法(广度优先)模版遍历树(或递归)
当左右结点都为空时最小路径数+1且返回最小值
迭代模版详参考leetcode-102.二叉树的层序遍历
/*迭代*/
class Solution {
public:
int minDepth(TreeNode* root) {
if(root==nullptr)return 0;
queue<TreeNode*> que;
que.push(root);
int min=0;
while(!que.empty()){
int size=que.size();
for(int i=0;i<size;i++){
TreeNode* node=que.front();
if(node->left==nullptr && node->right==nullptr){
//左右结点都空则为叶子结点,min+1后可直接跳出
return ++min;
}
if(node->left)que.push(node->left);
if(node->right)que.push(node->right);
que.pop();
}
min++;
}
return min;
}
};
/*递归遍历*/
class Solution {
public:
int minDepth(TreeNode* root){
if(root==nullptr)return 0;
int l,r;
l=minDepth(root->left);
r=minDepth(root->right);
if(l==0){
return r+1;
}
if(r==0){
return l+1;
}
return min(l,r)+1;
}
};