代码随想录算法训练营day16|104.二叉树的最大深度、559.n叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数

STM32 移植FreeModbus详细过程 modbus是一个非常好的串口协议(当然也能用在网口上),它简洁、规范、强大。可以满足大部分的工业、嵌入式需求。 这里详细说下如何将freemodbus移植到stm32平台。我之前下载的版本是1.6,我会在我的下载链接里面加上1.6的freemodbus压缩包以及我已经移植好的stm32 for freemodbus版本。我上传的移植好的绝对没问题,经过多个板子测试。这里编译器使用的是keil5.28,单片机用的是STM32F103RCT6。 移植到VET6以及ZET6的话只需要改一下选择的芯片就好,改法: 阅读详情

今天这些题目用层序遍历都能很快解决,但效率一般。

首先需要明确几个知识点。

  1. 二叉树的深度(Depth):(一般采用前序遍历方式)

    • 定义:从根节点到最远叶子节点的最长路径上的节点数。
    • 注意:最远叶子节点是指最深的叶子节点,即没有子节点的节点。
    • 性质:对于任何非空二叉树,其深度至少为 1。
  2. 二叉树的高度(Height):(一般采用后序遍历方式)

    • 定义:从根节点到最远叶子节点的最长路径上的节点数。
    • 注意:与深度相同,最远叶子节点是指最深的叶子节点。
    • 性质:对于任何非空二叉树,其高度至少为 1。

二叉树的最大深度

层序遍历

        最大深度即层序遍历所能达到最大层,创建一个depth表示层,在每层遍历完后将depth加1,最后返回depth。

class Solution {
public:
    queue<TreeNode *>queue;
    int depth = 0;
    int maxDepth(TreeNode* root) {
        if(root == nullptr){
            return depth;
        } // 如果根节点为空,直接返回depth
        queue.push(root);
        while(!queue.empty()){
            int levelsize = queue.size();
            for(int i = 0; i < levelsize; i++){
                TreeNode * cur = queue.front();
                queue.pop();
                if(cur->left){
                    queue.push(cur->left);
                }
                if(cur->right){
                    queue.push(cur->right);
                }
            }
            depth++;//每一层都完成后再depth++
        }
        return depth;
    }
};

算法的时间复杂度为O(n),空间复杂度也为O(n)。

递归法

根节点的高度就是二叉树的最大深度,使用后序遍历。

class Solution {
public:
    int maxDepth(TreeNode* root) {
        if(root == nullptr){//传入节点为空时,返回0
            return 0;
        }
        return max(maxDepth(root->left),maxDepth(root->right))+1;//返回左右子树的最大深度+1
    }
};

二叉树的高度和深度有啥区别?究竟用什么遍历顺序?很多录友搞不懂 | LeetCode:104.二叉树的最大深度_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV1Gd4y1V75u/?spm_id_from=333.788&vd_source=fc4a6e70e3a87b7ea67c2024e326e7c5

N叉树的最大深度

层序遍历

        同样,使用层序遍历,与二叉树相比的区别在于孩子节点的个数,考虑到孩子节点是用数组来表示,将数组中的元素依次加入队列,其他代码与上题无异。

class Solution {
public:
    int maxDepth(Node* root) {
        queue<Node *>queue;
        int depth = 0;
        if(root == nullptr){
            return depth;
        } // 如果根节点为空,直接返回depth
        queue.push(root);
        while(!queue.empty()){
            int levelsize = queue.size();
            for(int i = 0; i < levelsize; i++){
                Node * cur = queue.front();
                queue.pop();
                for(auto x:cur->children){
                    queue.push(x);
                }
            }
            depth++;//每一层都完成后再depth++
        }
        return depth;
    }
};

递归法

这里与二叉树的最大深度的区别就是节点的孩子数量,考虑使用一个数组保存孩子数量,同样使用递归。

class Solution {
public:
     int getdepth(Node *root) {
        if (root == nullptr) { // 如果节点为空,返回0
            return 0;
        }
        int ans = 0; // 初始化返回值ans为0
        for (auto x : root->children) { // 遍历节点的所有子节点
            ans = max(ans, getdepth(x)); // 递归调用getdepth函数,计算每个子节点的深度,并取最大值
        }
        return ans + 1; // 返回最大深度加1,即当前节点的深度
    }
    int maxDepth(Node* root) {
        int depth = getdepth(root);
        return depth;
    }
};

算法的时间复杂度为O(n),空间复杂度也为O(n)。

二叉树的最小深度

层序遍历

        这里使用层序遍历需要加一个判断条件,最小深度是找到距离根节点层最小的叶节点,叶节点的定义是无孩子节点的节点,所以在每次遍历层时,只要发现有一个节点无孩子节点,即可直接返回深度depth。

class Solution {
public:
    queue<TreeNode *>queue;
    int depth = 0;
    int minDepth(TreeNode* root) {
        if(root == nullptr){
            return depth;
        }
        queue.push(root);
        while(!queue.empty()){
            int levelsize = queue.size();
            for(int i = 0; i < levelsize;i++){
                TreeNode*cur = queue.front();
                queue.pop();
                if(cur->left){
                    queue.push(cur->left);
                }
                if(cur->right){
                    queue.push(cur->right);
                }
                if(!cur->left and !cur->right){
                    depth++;
                    return depth;
                }
            }
            depth++;
        }
        return depth;
    }
};

算法的时间复杂度为O(n),空间复杂度也为O(n)。

递归法

参考代码随想录。

看起来好像做过,一写就错! | LeetCode:111.二叉树的最小深度_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV1QD4y1B7e2/?spm_id_from=333.788&vd_source=fc4a6e70e3a87b7ea67c2024e326e7c5

class Solution {
public:
    int minDepth(TreeNode* root) {
        if(root == nullptr){
            return 0;
        }
        int leftheight = minDepth(root->left);
        int rightheight = minDepth(root->right);
        if(root->left == nullptr and root->right!=nullptr){
            return 1+rightheight;
        }
        if(root->right == nullptr and root->left!=nullptr){
            return 1+leftheight;
        }
        int result = 1 + min(leftheight,rightheight);
        return result; 
    }
};

算法的空间复杂度和时间复杂度均为O(n)。

完全二叉树的个数

层序遍历

将每层的节点相加,即能得到二叉树节点的个数。

class Solution {
public:
    queue<TreeNode*>queue;
    int count = 0;//创建
    int countNodes(TreeNode* root) {
        if(root==nullptr){
            return count;
        }
        TreeNode*cur = root;
        queue.push(root);
        while(!queue.empty()){
            int levelsize = queue.size();
            count += levelsize;
            for(int i = 0; i < levelsize;i++){
                cur = queue.front();
                queue.pop();
                if(cur->left){
                    queue.push(cur->left);
                }
                if(cur->right){
                    queue.push(cur->right);
                }
            }
        }
        return count;
    }
};

算法的时间复杂度为O(n),空间复杂度也为O(n)。

递归法

创建一个count代表总的数量,每遍历到一个节点,count++,且本题前中后序都行。

class Solution {
public:
    int count;
    int countNodes(TreeNode* root) {
        if(root == nullptr){//传入节点为空时,返回0
            return 0;
        }
        count++;//当遍历到一个非空节点,count++;
        countNodes(root->left);
        countNodes(root->right);
        return count;//返回最后的count
    }
};

算法的时间复杂度和空间复杂度都为O(n)。

全局–局部傅里叶神经算子(GL-FNO):原理、严格推导与 PINN 混合策略 本文提出了一种全局-局部傅里叶神经算子(GL-FNO)及其与物理信息神经网络(PINN)的结合方法。主要内容包括: 架构设计:GL-FNO包含两个分支 - 全局分支处理低频结构,使用下采样输入;局部分支处理高频细节,使用全分辨率输入。两分支通过自适应门控机制融合。 理论分析:证明了GL-FNO在"低频全局+高频局部"任务上的优势,给出了误差分解和复杂度分析,并推导了与PINN结合时的渐进一致性条件。 实现方法:采用频谱微分计算物理残差,推导了完整的训练流程,包括数据损失与物理损失的联合优 阅读详情

相关推荐

pytorch转onnx转paddlepaddle

1.pt转onnx 可查看我之前的文章:https://blog.csdn.net/oyjwin/article/details/117778583?spm=1001.2014.3001.5501

oyjwin的博客 1461

【代码随想录算法训练营Day16】● 104.二叉树的最大深度;●559.n叉树的最大深度;● 111.二叉树的最小深度;● 222.完全二叉树的节点个数

所以只需要对单条腿的二叉树进行条件判断,只有右子树就按左子树深度算,只有左子树就按右子树深度算。当遍历到叶子节点(即没有左节点也没有右节点)时,当前层数就是最小深度,其他思想与最大深度相同。如果根据求二叉树最大深度的递归代码来写的话,一条腿的二叉树最小深度就是0了,不符合题意。通过层序遍历先判断每一层有几个元素,通过将每一层套进一个循环,计算循环次数即可。

Tammy2001的博客 958

不只是安装:用OrbbecSDK_ROS2玩转深度相机点云、滤波与DDS调优

本文深入探讨了如何通过OrbbecSDK_ROS2实现深度相机的高级应用,包括点云处理、深度图优化和DDS调优。详细介绍了点云采集与可视化技巧、多种滤波算法的配置与组合策略,以及针对高带宽数据传输的DDS高级调优方法,帮助开发者在机器人导航和三维重建等场景中提升性能。

weixin_29246195的博客 776

代码随想录算法训练营Day 16|LeetCode104 二叉树的最大深度、LeetCode559 n叉树最大深度、eetcode111 二叉树的最小深度、Leetcode222 完全二叉树的节点个数

下图中的例子便需要特殊讨论①若左子树为空,右子树不为空,则最小深度为1+右子树最小深度;②若右子树为空,左子树不为空,则最小深度为1+左子树最小深度;③若左右子树都不为空,则最小深度为1+min(左子树最小深度,右子树最小深度)。求二叉树最小深度看似与求最大深度类似,实则处理起来还是更麻烦一些:最小深度概念为。与求深度类似,采用后序遍历,将max换成求和,递归后即可得完全二叉树的节点个数。空间复杂度:O(height) height为二叉树高度。空间复杂度:O(height)时间复杂度:O(n)

qq_52807368的博客 1661

【收藏向】模拟电子技术超强知识点总结 20小时不挂科

模电真的有难度的一门课,一定要好好学… 用的教材是华科康华光版,其他版本教材也可参考,内容是差不多的。 话不多说直接上思维导图干货(后有思维导图高清原图链接) 1 绪论 2 运算放大器 3 二极管及其基本电路 4 场效应管及其放大电路 5 双极结型三极管及其放大电路 三种组态总结看不清,给个特写 发现虽然csdn上传的是原图,但是显示的图片不是特别清晰,在此贴出B站知乎地址,第五章之后的内容都在上面,还可以查看原图 ———————————————————— B站专栏地址(可以点击查看原图) htt

工科狗Niko的博客 1万+

MMRotate 详细使用教程

MMRotate 详细使用教程 做旋转目标检测,怎么可以不知道如何使用MMRotate呢! github链接: https://github.com/open-mmlab/mmrotate 1 安装 创建虚拟环境并激活 conda create -n mmrotate python=3.7 -y conda activate mmrotate 安装 PyTorch 和 torchvision conda install pytorch torchvision -c pytorch 注意:确保

Sylvia_Lan的博客 1万+

代码随想录算法训练营Day16|Leetcode104二叉树的最大深度、Leetcode559n叉树的最大深度、Leetcode111二叉树的最小深度、Leetcode222完全二叉树的节点个数

Day16打卡!今日感想:今天依旧是用递归法解决二叉树中深度和高度有关的问题,要学会融会贯通~

m0_60979177的博客 1205

【深度学习新浪潮】深度学习特别是大模型在图像配准方面的研发进展

深度学习,尤其是大模型的出现,彻底改变了图像配准的技术范式——从“手工设计特征+几何约束”走向“数据驱动+通用特征学习”。当前,大模型配准已在医学影像、遥感、工业检测等领域实现商业化落地,解决了传统方法难以应对的跨模态、少样本、复杂形变等问题。但大模型配准仍面临推理效率、可解释性、数据隐私等挑战,未来的研发核心将是“精度与效率的平衡”“泛化能力的提升”“场景化适配的简化”。对于开发者而言,从简化版大模型配准代码入手,逐步理解预训练+微调的核心逻辑,是衔接前沿技术的有效路径。

专注:太空算力、AI infra、异构调度、大模型成本工程 424

代码随想录算法训练营Day16 | 104.二叉树的最大深度、559.n叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数 | Python | 个人记录向

二叉树:104.二叉树的最大深度、559.n叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数。

Python基本算法 870

如何用python自己复现worldquant brain中的回测结果

本文介绍了在Python中复现WorldQuant Brain平台上alpha 101因子1和4的回测框架构建要点。重点分析了Brain平台的策略设置:使用TOP 3000高流动性股票(可用中证1000/2000替代);delay=1表示t日信号在t+1日开盘调仓;详细解释了market/sector/industry/subindustry四级中性化方法;说明了decay参数控制持仓权重线性衰减;以及TRUNCATION参数限制单股仓位风险。文章还探讨了不同调仓时点的实现差异,为自主构建量化回测系统提供了

夏之微风的博客 732

LPDDR5 物理层一致性测试(连载・下):电平、过冲下冲与 Rx 接收眼图 Mask 掩模完整指标解读

本文系统梳理LPDDR5物理层一致性测试全流程,涵盖差分/单端电平、边沿斜率、交叉点电压、过冲下冲及CS/CA/DQ接收眼图掩模(Rx Mask)测试,详解各参数定义与工程实操要点。强调配置需与DRAM MR寄存器同步,突出差分≠合格、面积积分不可忽视、掩模失败优先排查参考电压与信号完整性等高频坑点,为硬件调试与SI工程师提供权威参考。

一只豌豆象的博客 40

代码随想录算法训练营 Day16|104.二叉树的最大深度, 559.n叉树的最大深度, 111.二叉树的最小深度, 222.完全二叉树的节点个数

尝试用递归,后序遍历没有思路。深度:二叉树中的节点到根节点的距离。高度:与深度相反,二叉树中的节点到叶子节点的距离。求高度,使用后序遍历,从下往上数。求深度,使用前序遍历,中左右,往下遍历一个加一。根据代码随想录视频。

Jiahui_0020的博客 396

C++ (week6、7):Linux系统编程4:网络

Linux网络:计算机网络概述、TCP协议、Socket编程、IO多路复用机制(select、epoll)、HTTP协议、进程池、线程池、大文件网络传输问题

Edward2022的博客 1430

【Leetcode】-代码随想录算法训练营Day16|104.二叉树的最大深度,559.n叉树的最大深度,111.二叉树的最小深度,222.完全二叉树的节点个数

二叉树的深度计算(例题附思路和代码) LeetCode 104.二叉树的最大深度,559.n叉树的最大深度,111.二叉树的最小深度,222.完全二叉树的节点个数

weixin_45364118的博客 379

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

代码随想录算法训练营Day16 | 104.二叉树的最大深度、559.N叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数

层序遍历的判断条件比较简单,存在两个孩子与只存在某一个节点的逻辑可以写在一起。层序遍历打十个之一。· 单层逻辑:分别计算当层节点左右子树的节点数,再算上自己1个节点进行返回。· 单层逻辑:分别计算当层节点左右子树的节点数,再算上自己1个节点进行返回。· 单层逻辑:计算左右子树的深度,取较大值即可。· 终止条件:遇到空节点返回节点个数0。· 返回值:使用int型返回节点个数。· 返回值:使用int型返回节点个数。· 传入参数:传入一个节点指针。· 传入参数:传入一个节点指针。· 传入参数:传入一个节点指针。

Y_Vollerei的博客 416

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

代码随想录算法训练营day16 | 104.二叉树的最大深度 & 559.n叉树的最大深度,111.二叉树的最小深度,222.完全二叉树的节点个数

1、树的高度是节点到叶子节点的距离;树的深度是到根节点的距离。2、求高度从下往上,使用后序遍历;求深度从上往下,使用前序遍历。3、根节点的高度等于树的最大深度。所以算深度可以使用求对应高度的后序遍历方法。4、完全二叉树的题,要抓住完全二叉树可拆分为多个满二叉树的特性来解题。

2301_77450803的博客 130

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

代码随想录算法训练营day16 | 104. 二叉树的最大深度,559. N 叉树的最大深度,111. 二叉树的最小深度,222. 完全二叉树的节点个数

【代码】代码随想录算法训练营day16 | 104. 二叉树的最大深度,559. N 叉树的最大深度,111. 二叉树的最小深度,222. 完全二叉树的节点个数。

weixin_46536635的博客 337

代码随想录算法训练营 | day16 二叉树 104.二叉树的最大深度 & 559.n叉树的最大深度,111.二叉树的最小深度,222.完全二叉树的节点个数

题目:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例: 给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3。

weixin_45011378的博客 144

代码随想录算法训练营Day16 —— 104.二叉树的最大深度、559.n叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数

利用完全二叉树的性质降低计算法复杂度,在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。对于情况二,分别递归左孩子,和右孩子,递归到某一深度一定会有左孩子或者右孩子为满二叉树,然后依然可以按照情况1来计算。前序与中序遍历:真正意义上的最大深度搜索,遍历每一个节点,每个节点都是母节点+1的深度,不断更新最大深度即可。那么使用后序遍历,其实求的是根节点到叶子节点的最小距离,就是求高度的过程,不过这个最小距离 也同样是最小深度。

weixin_43793717的博客 186

代码随想录算法训练营Day16 | 104.二叉树的最大深度 559.n叉树的最大深度 111.二叉树的最小深度 222.完全二叉树的节点个数

思路:递归法与层序法。

qq_24817679的博客 407

代码随想录算法训练营|DAY16|二叉树|104.二叉树的最大深度、559.n叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数

什么是深度,什么是高度,如何求深度,如何求高度。

king12345678k的博客 173

代码随想录算法训练营day16 | 104.二叉树的最大深度 559.n叉树的最大深度 111.二叉树的最小深度 222.完全二叉树的节点个数

二叉树

baimaozi_007的博客 103

代码随想录算法训练营Day16—— 104二叉树的最大深度、559N叉树的最大深度、111二叉树的最小深度、222完全二叉树的节点个数

【代码】代码随想录算法训练营Day16—— 104二叉树的最大深度、559N叉树的最大深度、111二叉树的最小深度、222完全二叉树的节点个数。

weixin_45075561的博客 92

代码随想录算法训练营day16|104.二叉树的最大深度,559.n叉树的最大深度,111.二叉树的最小深度,222.完全二叉树的节点个数

二叉树day3

weixin_52121600的博客 312

代码随想录算法训练营15期 Day 16 | 104.二叉树的最大深度、559.n叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数

什么是深度,什么是高度,如何求深度,如何求高度,这里有关系到二叉树的遍历方式。深度是前序遍历,从上往下走;高度是后序遍历,从下往上走,深度为最大高度。思路:本题的关键是使用高度的方式返回相应的深度,经过几次后序遍历,然后直接返回相应的最大高度就是相应的深度。

m0_47489229的博客 199

代码随想录算法训练营刷题Day16|104.二叉树的最大深度 、559.n叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数

1、如果是普通二叉树,用前中后序遍历、层序遍历都可以统计节点个数。1、关键:和二叉树最大深度的区别是处理左右孩子不为空的逻辑。3、关键:根节点的高度 = 二叉树的最大深度。:给出一个完全二叉树,求出该树的节点个数。1、高度:二叉树最大深度 = 根节点高度。:给定一个 n 叉树,找到其最大深度。1、高度:节点到叶子节点的距离+1。:给定一个二叉树,找出其最小深度。:给定一个二叉树,找出其最大深度。2、深度:节点到根节点的距离+1。2、代码:(普通二叉树)

weixin_43446964的博客 160
上一篇: 代码随想录算法训练营Day15|102.层序遍历、226.翻转二叉树、101.对称二叉树 C++
下一篇: 代码随想录算法训练营day17|110.平衡二叉树、257二叉树的所有路径、404.左叶子之和 C++
viaNoir
博客等级 码龄10年 535粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值