剑指offer JZ38 - 二叉树的深度- JavaScript

一、题目描述

输入一棵二叉树,求该树的深度。javascript

从根结点到叶结点依次通过的结点(含根、叶结点)造成树的一条路径,最长路径的长度为树的深度。java

好比:给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3。code

3
/ \
9 20
  / \
  15 7

二、解题思路

求一个规模为 n 的问题,先求左边规模大约为 n/2 的问题,再求右边规模大约为 n/2 的问题。排序

而后合并左边,右边的解,从而求得最终解。具体可参考归并排序。ip

因此最终结果为 max( 头结点左子树的最大深度, 头结点右子树的最大深度)+1io

  1. 求 TreeDepth(TreeNode* pRoot)->int
  2. 先求 TreeDepth(pRoot->left) ->lval
  3. 再求 TreeDepth(pRoot->right) ->rval
  4. return max(lval, rval) + 1

时间复杂度:O(n)。空间复杂度:O(n),当退化到链表时function

function TreeDepth(pRoot){
    if(!pRoot){
        return 0;
    }else{
        let left = TreeDepth(pRoot.left);
        let right = TreeDepth(pRoot.right);
        return Math.max(left,right)+1;
    }
}