Leetcode104. 二叉树的最大深度 -- JavaScript版

本文介绍了如何利用深度优先搜索(DFS)算法来寻找二叉树的最大深度。在DFS过程中,通过记录每个节点的层级并更新最大深度,最终得到树的最大深度。空间复杂度为O(n),因为递归调用会形成调用堆栈,最坏情况下深度等于节点数。代码中展示了具体的DFS实现,注意在递归遍历时层级参数应为l+1而非l++。
摘要由CSDN通过智能技术生成

二叉树的概念:树中每个节点最多只能有两个子节点。
树的一些常用操作,深度优先遍历DFS、广度(宽度)优先遍历BFS,二叉树的先、中、后序遍历。

题目描述

在这里插入图片描述

思路

这道题要求找出数的最大深度,优先考虑使用DFS,DFS可以对根节点以及根结点的children进行深度查找,在查找的过程中,记录每个节点的层级,找到最大的即可。

时间复杂度为 O(n),n为整棵树的节点树,因为每个节点都遍历到;
空间复杂度为 O(n),n为最大深度。
为什么空间复杂度是O(n),而不是O(1)呢?
因为code中存在函数里面调用函数,会形成调用堆栈,递归也是,函数没有执行完之前,内存一直存在。树的嵌套层数等于最大深度,二叉树的最大深度和树的节点数的关系可以表示为:
最坏的情况O(n),最大深度等于节点数,二叉树不分成两个叉,只在一个叉上不断延续;
最好的情况O(logN),每个叉都分为二叉,均匀分布。

步骤

  1. 新建变量,记录最大深度;
  2. 深度优先遍历整棵树,并记录每个节点的层级,同时刷新最大深度;
  3. 遍历结束返回最大深度;

Code part

var maxDepth = function(root) {
  let res = 0;
  const dfs = (n,l) => {
    if(!n) return;
    if(!n.left && !n.right){ //在叶子节点取l,避免每次递归都执行Math.max
      res = Math.max(res,l);
    }
    dfs(n.left,l+1) //注意这里是l + 1,不是l++
    dfs(n.right,l+1)
  }
  dfs(root,1)
  return res
};

在这里插入图片描述
需要注意的是,在递归遍历时,层级传参是 l+1,不是 l++,因为是把整个 l+1 作为参数传入的,不是传参 l。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值