1. // 104. 二叉树的最大深度
    2. // 给定一个二叉树,找出其最大深度。
    3. // 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
    4. // 说明: 叶子节点是指没有子节点的节点。
    5. // 示例:
    6. // 给定二叉树 [3,9,20,null,null,15,7],
    7. // 3
    8. // / \
    9. // 9 20
    10. // / \
    11. // 15 7
    12. /**
    13. * Definition for a binary tree node.
    14. * function TreeNode(val, left, right) {
    15. * this.val = (val===undefined ? 0 : val)
    16. * this.left = (left===undefined ? null : left)
    17. * this.right = (right===undefined ? null : right)
    18. * }
    19. */
    20. /**
    21. * @param {TreeNode} root
    22. * @return {number}
    23. */
    24. // 题解
    25. // 1.最大深度,考虑深度优先遍历
    26. // 2.每次遍历记录层级
    27. var maxDepth = function (root) {
    28. // 定义一个变量来记录层级
    29. let res = 0;
    30. const dfs = (n, l) => {
    31. if (!n) { return; }
    32. // 当为叶子节点时刷新
    33. if(!n.left && !n.right) {
    34. res = Math.max(res, l)
    35. }
    36. // 遇到子节点加1
    37. dfs(n.left, l + 1)
    38. dfs(n.right, l + 1)
    39. }
    40. // 层级初始化为1
    41. dfs(root, 1)
    42. return res
    43. };

    时间复杂度:O(n)
    空间复杂度:递归形成堆栈,(函数里面调用函数)看函数嵌套层数,这里就是二叉树的深度,最坏的情况就是所有值都是左节点,O(N),最好的情况是O(log N)