题目链接
Leetcode.111 二叉树的最小深度 easy
题目描述
给定一个二叉树,找出其最小深度。
最小深度是从 根节点 到 最近叶子节点 的 最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点。
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:2
示例 2:
输入:root = [2,null,3,null,4,null,5,null,6]
输出:5
提示:
- 树中节点数的范围在 [ 0 , 1 0 5 ] [0, 10^5] [0,105] 内
- − 1000 < = N o d e . v a l < = 1000 -1000 <= Node.val <= 1000 −1000<=Node.val<=1000
解法:递归
我们要求的是 叶子结点 到 根结点 的最短路径。
我们设 l l l 和 r r r 分别是 当前结点 r o o t root root 的左子节点到根结点的最短路径长度 和 当前结点 r o o t root root 的右子节点到根结点的最短路径长度。
- 如果 l = = 0 l ==0 l==0,返回 r + 1 r + 1 r+1
- 如果 r = = 0 r == 0 r==0,返回 l + 1 l + 1 l+1
- 否则返回 m i n { l , r } + 1 min\{l , r \} + 1 min{l,r}+1
时间复杂度: O ( n ) O(n) O(n)
C++代码:
class Solution {
public:
int minDepth(TreeNode* root) {
if(root == nullptr) return 0;
int l = minDepth(root->left);
int r = minDepth(root->right);
if(l == 0) return r + 1;
else if(r == 0) return l + 1;
return min(l , r) + 1;
}
};
Python代码:
class Solution:
def minDepth(self, root: Optional[TreeNode]) -> int:
if root == None:
return 0
l = self.minDepth(root.left)
r = self.minDepth(root.right)
if l == 0:
return r + 1
elif r == 0:
return l + 1
else:
return min(l , r) + 1