1. 最大深度问题
给定一个二叉树 root ,返回其最大深度。
说明:最大深度为根节点到最远叶子结点的最长路径上的节点数。叶子节点是指灭有子节点的节点
输入:root = [3,9,20,null,null,15,7]
输出:3
判断逻辑:
故核心判断逻辑代码为:
int leftHeight = getDepth(node.left);//左
int rightHeight = getDepth(node.right);//右
int depth = 1 + max(leftHeight , rightHeight);//中
实现代码为:
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;
}
2. 最小深度问题
给定一个二叉树,找出其最小深度。
说明:最小深度是从根节点到最近叶子节点的最短路径上的节点数量。叶子节点是指没有子节点的节点。
输入:root = [1,null,2,4,3,7]
输出:2
注意点:
最小深度是从根节点到最近叶子节点的最短路径上的节点数,也就是最小深度的一层必须要有叶子节点
,因为不能直接用。
终止条件:
- 如果左子树为空,右子树不为空,说明最小深度是 1+ 右子树的深度。
- 反之,右子树为空,左子树不为空,最小深度是 1 + 左子树的深度。
代码实现如下:
public int minDepth(TreeNode root) {
if (root == null) {
return 0;
}
if (root.left == null && root.right == null) {
return 1;
}
//确保在遍历二叉树的过程中,如果没有子节点的情况下,能够正确返回最小深度的值
int min_depth = Integer.MAX_VALUE;
if (root.left != null) {
min_depth = Math.min(minDepth(root.left), min_depth);
}
if (root.right != null) {
min_depth = Math.min(minDepth(root.right), min_depth);
}
return min_depth + 1;
}