首页 > 其他分享 >leetcode:二叉树的最大深度

leetcode:二叉树的最大深度

时间:2023-05-17 19:31:26浏览次数:48  
标签:BFS 遍历 return queue 二叉树 深度 root leetcode

题目描述

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

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

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

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

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

题目链接:104. 二叉树的最大深度

思路

由于树是一种递归的数据结构,因此用递归去解决的时候往往非常容易。

用递归实现的代码如下:

var maxDepth = function (root) {

    if (!root) return 0;

    if (!root.left && !root.right) return 1;

    return 1 + Math.max(maxDepth(root.left), maxDepth(root.right));

};

二叉数的遍历主要有前中后遍历和层次遍历。 前中后属于 DFS,层次遍历则可以使用 BFS 或者 DFS 来实现。只不过使用 BFS 来实现层次遍历会容易些。

对于此题我们首先应该想到的是树的各种遍历,由于我们求的是深度,因此 使用层次遍历(BFS)是非常合适的。 我们只需要记录有多少层即可。

关键点:

  • 队列
  • 队列中用 Null(一个特殊元素)来划分每层,或者在对每层进行迭代之前保存当前队列元素的个数(即当前层所含元素个数)
  • 树的基本操作- 遍历 - 层次遍历(BFS)

代码:

var maxDepth = function (root) {
    if (!root) return 0;
    if (!root.left && !root.right) return 1;
    // 层次遍历 BFS
    let cur = root;
    const queue = [root, null];
    let depth = 1;
    while ((cur = queue.shift()) !== undefined) {
        if (cur === null) {
            // 注意: 不处理会无限循环,进而堆栈溢出
            if (queue.length === 0) return depth;
                depth++;
                queue.push(null);
                continue;
            }

            const l = cur.left;
            const r = cur.right;
            if (l) queue.push(l);
            if (r) queue.push(r);
        }
    return depth;
};

总结:

本题主要考察二叉树的各种遍历方式,要求熟练掌握,此外还应掌握递归的使用。

标签:BFS,遍历,return,queue,二叉树,深度,root,leetcode
From: https://blog.51cto.com/codeniu/6293347

相关文章

  • 动手学深度学习(一) 线性回归
    线性回归主要内容包括:线性回归的基本要素线性回归模型从零开始的实现线性回归模型使用pytorch的简洁实现线性回归的基本要素模型为了简单起见,这里我们假设价格只取决于房屋状况的两个因素,即面积(平方米)和房龄(年)。接下来我们希望探索价格与这两个因素的具体关系。线性回归假设输出与......
  • 动手学深度学习(十) NLP 语言模型与数据集
    语言模型一段自然语言文本可以看作是一个离散时间序列,给定一个长度为的词的序列,语言模型的目标就是评估该序列是否合理,即计算该序列的概率:本节我们介绍基于统计的语言模型,主要是元语法(-gram)。在后续内容中,我们将会介绍基于神经网络的语言模型。语言模型假设序列中的每个词是依次生......
  • Leetcode-Easy 806. Number of Lines To Write String
    题目描述给一个字符串S,从左到右将它们排列行,每行最大长度为100,,同时给定一个数组withds,widths[0]对应着a的宽度,widths[1]对应着b的宽度,...,widths[25]对应着z的宽度。求:至少需要多少行以及最后一行的长度下面是一个实例:Example:Input:widths=[10,10,10,10,10,10,1......
  • leetcode 1321 餐館營業額變化增長
    leetcode1321餐館營業額變化增長selectdistinctc2.visited_on,(selectsum(amount)fromCustomerc1wherec1.visited_on<=c2.visited_onandc1.visited_on>=date_sub(c2.visited_on,interval6day))asamount,round((selectsum(amount)fromCustomerc1......
  • 二刷Leetcode-Days04
    数组:/***27.移除元素*@paramnums*@paramval*@return很多考察数组、链表、字符串等操作的面试题,都使用双指针法。*/publicintremoveElement(int[]nums,intval){intleft=0;for(inti=0;i<nums.l......
  • 基于LSTM-RNN的深度学习网络的训练对比matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:   2.算法涉及理论知识概要        长短期记忆网络(LSTM,LongShort-TermMemory)是一种时间循环神经网络,是为了解决一般的RNN(循环神经网络)存在的长期依赖问题而专门设计出来的,所有的RNN都具有一种重复神经网络模块的链式形......
  • KDDCup深度学习
    importpandasaspdimporttorchimporttorchvisionimporttorch.nnasnnimportnumpyasnpimporttorch.utils.dataasDatafromsklearnimportpreprocessingimportmatplotlib.pyplotaspltepochs=20batch_size=64lr=0.001#我直接将官网的格式改成了c......
  • 【C++深度解析】9、const 常量?只读变量?
    文章目录1const常量的判别准则1.1编程实验2小结看了前面的关于const的内容,不知道是不是有疑问,const什么时候为只读变量,什么时候是常量?1const常量的判别准则只有用字面量初始化的const常量才会进入符号表使用其他变量初始化的const常量仍然是只读变量被volatile修......
  • 6、二叉树和递归
    内容来自刘宇波老师玩转算法面试1、二叉树天然的递归结构二分搜索树2、一个简单的二叉树问题引发的血案3、注意递归的终止条件4、定义递归问题5、稍复杂的递归逻辑6、二分搜索树中的问题......
  • 作为一个 Android 开发者,我为什么要在意深度学习?
    阅读本文大概需要5.20分钟。AlphaGo再次战胜人类,Google发布TensorFlow正式版,百度筹建深度学习实验室......人人都在谈论机器学习、深度学习,作为移动应用开发者,这些概念离你很远吗?其实不然,如果你不想被未来淘汰,想获得更好的工作,想在技术上变得更牛掰,机器学习和深度学习可能是......