剑指 Offer 55 - I. 二叉树的深度

105 阅读1分钟

题目

输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。

例如:

给定二叉树 [3,9,20,null,null,15,7]

    3
   / \
  9  20
    /  \
   15   7

返回它的最大深度 3 。

 

提示:

  1. 节点总数 <= 10000

注意:本题与主站 104 题相同:leetcode-cn.com/problems/ma…

题解

从最简单的情况开始思考:

  1. 如果二叉树只有一个节点,那么它的深度为 1。
  2. 如果二叉树根节点,只有左子树没有右子树,它的深度为左子树的深度 + 1(根节点的深度
  3. 如果二叉树根节点,只有右子树没有左子树,它的深度为右子树的深度 + 1 (根节点的深度)
  4. 如果二叉树根节点,左右子树都有, 它的深度为左右子树中的最大深度 + 1,公式为Math.max(leftTreeDepth, rightTreeDepth) + 1

参考代码

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number}
 */
var maxDepth = function(root) {
    // 空节点不存在,深度为 0;
    if (root == null) return 0;
    // 左子树深度
    const leftTreeDepth = maxDepth(root.left);
    // 右子树深度
    const rightTreeDepth = maxDepth(root.right);

    return Math.max(leftTreeDepth, rightTreeDepth) + 1;
};

原题链接

剑指 Offer 55 - I. 二叉树的深度