1.问题描述
2.解决办法
最大深度:
递归三部曲:
1 确定递归函数的参数和返回值
参数为当前二叉树根节点的指针,返回值为当前二叉树的最大深度。
2 明确递归终止条件
遇到空节点,返回0,表明上一层已经是叶子节点,深度不会再增加了。
3 确定单层递归逻辑
当前二叉树的最大深度,如果当前二叉树根节点为空,则返回0,否则返回其左子树的最大深度leftHeight和右子树的最大深度rightHeight的较大值+1(1代表根节点这一层的深度)。
最小深度:
三种情况:
- 左孩子为空 那么右的深度+1
- 右孩子为空 那么左的深度+1
- 左右都不为空,选在小的深度+1
以此递归
3.代码实现
class Solution {
public int maxDepth(TreeNode root) {
if (root == null) {
return 0;
} else {
int leftHeight = maxDepth(root.left);
int rightHeight = maxDepth(root.right);
return Math.max(leftHeight, rightHeight) + 1;
}
}
}
class Solution {
/**
* 递归法,相比求MaxDepth要复杂点
* 因为最小深度是从根节点到最近**叶子节点**的最短路径上的节点数量
*/
public int minDepth(TreeNode root) {
if (root == null) {
return 0;
}
int leftDepth = minDepth(root.left);
int rightDepth = minDepth(root.right);
if (root.left == null) {
return rightDepth + 1;
}
if (root.right == null) {
return leftDepth + 1;
}
// 左右结点都不为null
return Math.min(leftDepth, rightDepth) + 1;
}
}