一、题目
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明:叶子节点是指没有子节点的节点。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/minimum-depth-of-binary-tree/description/
二、C++解法
我的思路及代码
采用BFS,一层一层的对二叉树进行遍历,当遇到一个节点没有左右孩子的时候返回即可。顺便提一下,如果不提前返回的话可以计算二叉树的高度(深度),详情可以见二叉树的最大深度
class Solution {
public:
int minDepth(TreeNode* root) {
if(root==NULL) return 0;
queue<TreeNode*> q;
TreeNode* temp;
int ans=1;
q.push(root);
while(q.size()){
int size = q.size();
for(int i=0;i<size;i++){
temp = q.front();
q.pop();
//核心代码
if(temp->left==NULL&&temp->right==NULL)
return ans;
if(temp->left!=NULL)
q.push(temp->left);
if(temp->right!=NULL)
q.push(temp->right);
}
ans++;
}
return ans;
}
};
- 时间复杂度:O(n),其中 n 为二叉树的节点个数。与方法一同样的分析,每个节点只会被访问一次
- 空间复杂度:此方法空间的消耗取决于队列存储的元素数量,其在最坏情况下会达到 O(n)
官方参考代码
暂无