输入一棵二叉树,求该树的深度。javascript
从根结点到叶结点依次通过的结点(含根、叶结点)造成树的一条路径,最长路径的长度为树的深度。java
好比:给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3。code
3 / \ 9 20 / \ 15 7
求一个规模为 n 的问题,先求左边规模大约为 n/2 的问题,再求右边规模大约为 n/2 的问题。排序
而后合并左边,右边的解,从而求得最终解。具体可参考归并排序。ip
因此最终结果为 max(
头结点左子树的最大深度, 头结点右子树的最大深度)+1
io
TreeDepth(TreeNode* pRoot)->int
TreeDepth(pRoot->left) ->lval
TreeDepth(pRoot->right) ->rval
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; } }