题目描述
求给定二叉树的最小深度。最小深度是指树的根结点到最近叶子结点的最短路径上结点的数量。
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.
题解:叶子节点指的是左右子树同时为空


解法1(递归解法):
class Solution {
public:
int run(TreeNode* root) {
if(root==NULL){
return 0; //当前节根节点为空即为叶子节点,作为递归的跳出条件
}
int left = run(root->left); //递归左子树
int right = run(root->right); //递归右子树
if(left*right >0){ //当前节点同时存在左右子树
return (left>right?right:left)+1; //求最小
}else{ //当前节点左子树或者右子树为空
return (left>right?left:right)+1; // 求最大
}
}
};
方法二(队列):
链接:https://www.nowcoder.com/questionTerminal/e08819cfdeb34985a8de9c4e6562e724?answerType=1&f=discussion
来源:牛客网
class Solution {
public:
int run(TreeNode *root) {
if(!root) return 0;
queue<TreeNode*> que;
que.push(root);
TreeNode* p;
int level=0;
while(!que.empty()){
level++;
int size=que.size();
while(size--){
p=que.front();
que.pop();
if(!p->left&&!p->right) return level; //当前节点左右子树同时为空则跳出
if(p->left) que.push(p->left);
if(p->right) que.push(p->right);
}
}
}
};

这篇博客探讨了如何求解给定二叉树的最小深度问题,提供了递归和队列两种解法。递归解法通过检查根节点及其左右子树,当遇到叶子节点时返回0,否则计算最小深度。队列解法利用广度优先搜索来找到最近的叶子节点。
883

被折叠的 条评论
为什么被折叠?



