111-二叉树的最小深度
大约 2 分钟
题目地址(111. 二叉树的最小深度 - 力扣(LeetCode))
https://leetcode.cn/problems/minimum-depth-of-binary-tree/description/
题目描述
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明:叶子节点是指没有子节点的节点。
示例 1:
输入:root = [3,9,20,null,null,15,7] 输出:2
示例 2:
输入:root = [2,null,3,null,4,null,5,null,6] 输出:5
提示:
- 树中节点数的范围在
[0, 105]
内 -1000 <= Node.val <= 1000
前置知识
- 二叉树
- DFS
- 叶子节点
思路
叶子节点的定义是左孩子和右孩子都为 null 时叫做叶子节点
只有根节点时,深度为1
当根节点左右孩子有一个为空时,返回不为空的孩子节点的深度
当根节点左右孩子都不为空时,返回左右孩子较小深度的节点值
关键点
代码
class Solution {
public int minDepth(TreeNode root) {
// 如果树是空,那么最小深度就是0
if(root == null) return 0;
// 如果只有根节点,那么最小深度就是1
if(root.left == null && root.right == null) return 1;
// 如果左子树为空,那么求右子树的最小深度
int ans = Integer.MAX_VALUE;
if(root.left != null) {
ans = Math.min(minDepth(root.left), ans);
}
if(root.right != null) {
ans = Math.min(minDepth(root.right), ans);
}
return ans + 1;
}
}
复杂度分析
令 n 为二叉树节点个数。
- 时间复杂度:,每个节点都会遍历一次
- 空间复杂度:,其中 H 是树的高度。空间复杂度主要取决于递归时栈空间的开销,最坏情况下,树呈现链状,空间复杂度为 O(N)。