104. 二叉树的最大深度
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
思路:递归
递归是一个反复调用自身的过程,它每一级的功能都是一样的,我们只需要关注一级递归的解决过程即可
- 终止条件。 什么情况下递归结束?当然是树为空的时候,此时树的深度为0,递归就结束了。
- 返回值。 应该返回什么?题目求的是树的最大深度,我们需要从每一级得到的信息自然是当前这一级对应的树的最大深度,因此我们的返回值应该是当前树的最大深度,这一步可以结合第三步来看。
- 本级递归做甚。 首先,递归后我们眼里的树就是根左右,不要想整个树一级一级递归的过程是什么样的,此时就三个节点:root、root.left、root.right,
- 我们最终能够返回的是最大深度,其中根据第二步,root.left和root.right分别记录的是root的左右子树的最大深度。那么本级递归自然就是在root的左右子树中选择较大的一个,再加上1就是以root为根的子树的最大深度了,然后再返回这个深度即可。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public int maxDepth(TreeNode root) {
if(root==null){
return 0;
}
int leftLength = maxDepth(root.left);
int rightLength = maxDepth(root.right);
return Math.max(leftLength,rightLength)+1;
//简写
//return root==null?0:Math.max(maxDepth(root.left),maxDepth(root.right)+1
}
}