LeetCode求给定二叉树的最小深度讨论总结
题目描述
求给定二叉树的最小深度。最小深度是指树的根结点到最近叶子结点的最短路径上结点的数量。
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);
}
}
}
};