[ 力扣104 ] 【二叉树经典问题】二叉树的最大深度 | 刷题打卡

515 阅读1分钟

题目名称:二叉树的最大深度

题目地址:leetcode-cn.com/problems/ma…

给定一个二叉树,找出其最大深度。

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

说明: 叶子节点是指没有子节点的节点。

示例:

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

    3
   / \
  9  20
    /  \
   15   7
返回它的最大深度 3

解法

  • 这道题是二叉树的最经典问题,因为分别能用DFS和BFS两种方法解决

一、深度优先遍历

  • 递归,二叉树的最大深度为左子树的最大深度+1,或者右子树的最大深度+1
/**
 * @param {TreeNode} root
 * @return {number}
 */
var maxDepth = function (root) {
  if (!root) return 0
  return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1
};

二、广度优先遍历

  • 每层循环中深度+1,直到无可循环
/**
 * @param {TreeNode} root
 * @return {number}
 */
var maxDepth1 = function (root) {
  if (!root) return 0
  let dep = 0
  let queue = []
  queue.push(root)
  while (queue.length) {
    dep++
    let list = []
    for (let node of queue) {
      node.left && list.push(node.left)
      node.right && list.push(node.right)
    }
    queue = list
  }
  return dep
};

总结

  • 二叉树的问题最适合套模板
  • 深度优先模板
function dfs(root){
    if(!root) do some thing...
    if(root.left) do something...
    if(root.right) do something...
}
  • 广度优先模板
function bfs(root){
    if(!root) return null
    let queue = [root]
    while(queue.length){
        const stack = []
        for(let node of queue){
            node.left && do something...
            node.right && do something...
        }
        queue = stack
    }
    return something
}

说明

  1. 本题解已同步leetcode-js-simple/01.[ 104 ] 二叉树的最大深度,可以复制代码进行调试。
  2. 总结出了一套亲测有效的前端无痛刷题项目,有助于算法小白平稳入门,详见leetcode-js-roadmap,希望对从零开始刷题的前端小伙伴们带来帮助~

本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情