解题思路:递归
递归的解题步骤:
- 将原问题分解成子问题,并确定子问题和原问题之间的递推关系
- 确定 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)
