二叉树的最大深度
来源:力扣(LeetCode) 链接:leetcode.cn/problems/ma…
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
代码
class Solution {
public int maxDepth(TreeNode root) {
if (root == null) {
return 0;
}
int leftDepth = maxDepth(root.left);
int rightDepth = maxDepth(root.right);
return Math.max(leftDepth, rightDepth) + 1;
}
}
思路分析
-
首先,如果二叉树为空(即根节点为null),则最大深度为0。
-
否则,我们递归计算左子树的最大深度和右子树的最大深度,然后取其中较大的值,并加1,表示当前节点所在的路径长度。最后,返回这个值作为整个二叉树的最大深度。
-
递归的终止条件是当遍历到叶子节点时,返回0,即表示到达叶子节点的路径长度为0。
该算法的时间复杂度是O(n),其中n是二叉树中的节点个数,因为我们需要遍历所有的节点来计算最大深度。空间复杂度是O(log n),即递归调用栈的空间。
二叉树的最小深度
来源:力扣(LeetCode) 链接:leetcode.cn/problems/mi…
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明:叶子节点是指没有子节点的节点。
示例 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
代码
class Solution {
public int minDepth(TreeNode root) {
if (root == null) {
return 0;
}
// 当前节点为叶子节点时,返回1
if (root.left == null && root.right == null) {
return 1;
}
// 左子树为空时,返回右子树的最小深度加1
if (root.left == null) {
return minDepth(root.right) + 1;
}
// 右子树为空时,返回左子树的最小深度加1
if (root.right == null) {
return minDepth(root.left) + 1;
}
// 左右子树都不为空时,返回左右子树中最小深度的较小值加1
return Math.min(minDepth(root.left), minDepth(root.right)) + 1;
}
}
思路分析
-
首先,如果二叉树为空(即根节点为null),则最小深度为0。
-
当遍历到叶子节点时,即左子树和右子树都为空时,返回1,表示到达叶子节点的路径长度为1。
-
对于非叶子节点,我们分别递归计算左子树和右子树的最小深度。如果其中一个子树为空,我们就返回另一个子树的最小深度加1。如果两个子树都不为空,我们就返回左右子树中最小深度的较小值加1。
-
最后,返回根节点的最小深度作为整个二叉树的最小深度。
该算法的时间复杂度是O(n),其中n是二叉树中的节点个数,因为我们需要遍历所有的节点来计算最小深度。空间复杂度是O(log n),即递归调用栈的空间。