解题思路:递归
递归的解题步骤:
- 将原问题分解成子问题,并确定子问题和原问题之间的递推关系
- 确定 base case 的返回值
已知一棵树的根节点为:TreeNode root
该树的深度表示为:maxDepth(root)
该树的左子树深度表示为:maxDepth(root.left) ;该树的右子树深度表示为:maxDepth(root.right)
子问题和原问题之间的递推关系为:
maxDepth(root) = Math.max(maxDepth(root.left),maxDepth(root.right)) + 1;
当 root 为空时,说明我们遍历这棵树已经越过了叶节点,此时返回深度为 0
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int maxDepth(TreeNode root) {
if(root == null){
return 0;
}
return Math.max(maxDepth(root.left),maxDepth(root.right)) + 1;
}
}
复杂度分析
- 时间复杂度:O(N)
我们通过递归遍历树的深度,需要遍历到每一个节点,所以时间复杂度为:O(N)
- 空间复杂度:O(N)
当一棵二叉树退化至链表时,调用递归栈的深度为 O(N)