方法一(递归)
1.题意整理
- 给定一颗二叉树。
- 求二叉树的最大深度。深度是指树的根节点到任一叶子节点路径上节点的数量。
2.思路整理
按照二叉树递归的套路,需要考虑当前节点的情况、当前节点左子树的情况、当前节点右子树的情况。只要知道当前节点左右子树的深度,那么当前节点为根的子树的深度即为两者中较大的一个深度加1。
- 递归终止条件:root为空,直接返回0。
- 递归如何传递:每次需要往左右子树方向递归,只要直到左右子树深度,即可计算当前子树深度。
- 递归的返回值:返回当前子树深度。
图解展示:
3.代码实现
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类
* @return int整型
*/
public int maxDepth (TreeNode root) {
//为空,直接返回0
if(root==null) return 0;
//左子树深度
int left=maxDepth(root.left);
//右子树深度
int right=maxDepth(root.right);
//左右子树深度的较大者加1即为当前子树深度
return Math.max(left,right)+1;
}
}
4.复杂度分析
- 时间复杂度:需要遍历二叉树中所有节点,所以时间复杂度是。
- 空间复杂度:递归栈的深度为,当退化为链表时,深度为n,所以空间复杂度为。