【数据结构与算法】力扣 104. 二叉树的最大深度

54 阅读1分钟

题目描述

给定一个二叉树 root ,返回其最大深度。

二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。

 

示例 1:

 

输入: root = [3,9,20,null,null,15,7]
输出: 3

示例 2:

输入: root = [1,null,2]
输出: 2

 

提示:

  • 树中节点的数量在 [0, 104] 区间内。
  • -100 <= Node.val <= 100

分析解答

二叉树的高度和深度刚好是相反的。所以当求高度的时候也求出了深度。

  • 高度:后序遍历;
  • 深度:前序遍历;

使用后序遍历:

var maxDepth = function(root) {
    // 终止条件
    if(root == null) return 0
    // 递归逻辑 左右中(中体现在逻辑深度加 1 )
    // 左
    let leftHeight = maxDepth(root.left)
    // 右
    let rightHeight = maxDepth(root.right)
    // 中 递归到底了 返回 1 告诉父节点 向上派发
    let height = Math.max(leftHeight, rightHeight) + 1
    return height 
};

精简后序:

var maxDepth = function(root) {
    // 终止条件
    if(root == null) return 0
    // 递归逻辑 左右中(中体现在逻辑深度加 1 )
    return 1 + Math.max(maxDepth(root.left), maxDepth(root.right))
};

使用层序遍历:

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number}
 */
var maxDepth = function(root) {
    if(root == null) return 0
    let stack = [root]
    let deep = 0
    while (stack.length) {
        let len = stack.length
        deep++
        while (len) {
            let node = stack.shift()
            node.left && stack.push(node.left)
            node.right && stack.push(node.right)
            len--
        }
    }
    return deep
};

所以,关键还是要理解各个遍历以及其使用场景。

思路拓展