leetcode958. 二叉树的完全性检验,层序遍历的巧用

news2024/9/24 13:13:05

leetcode958. 二叉树的完全性检验

给你一棵二叉树的根节点 root ,请你判断这棵树是否是一棵 完全二叉树
在一棵 完全二叉树 中,除了最后一层外,所有层都被完全填满,并且最后一层中的所有节点都尽可能靠左。最后一层(第 h 层)中可以包含 12h 个节点。

示例 1:
在这里插入图片描述
输入:root = [1,2,3,4,5,6]
输出:true
解释:最后一层前的每一层都是满的(即,节点值为 {1} 和 {2,3} 的两层),且最后一层中的所有节点({4,5,6})尽可能靠左。

示例 2:
在这里插入图片描述
输入:root = [1,2,3,4,5,null,7]
输出:false
解释:值为 7 的节点不满足条件「节点尽可能靠左」。

算法思想

为了判断一棵树是否是完全二叉树,我们可以使用层次遍历(BFS)。
层序遍历我写过题解

算法步骤

1.如果根节点为空,返回 true,因为空树是完全二叉树。
2.使用队列进行层次遍历。
3.当遍历到第一个 NULL 节点时,设置一个标记位 flag 为 true。
4.如果在遇到第一个 NULL 节点之后,再遇到非 NULL 节点,说明不是完全二叉树,返回 false。
5.继续遍历直到队列为空,如果所有节点都满足条件,返回 true。

具体代码

class Solution {
  public:
    bool isCompleteTree(TreeNode* root) {
        //空树一定是完全二叉树
        if(root == NULL) 
            return true;
        queue<TreeNode*> q;
        //根节点先访问
        q.push(root); 
        //定义一个首次出现的标记位
        bool flag = false; 
        //层次遍历
        while(!q.empty()){ 
            int sz = q.size();
            for (int i = 0; i < sz; i++) {
                TreeNode* cur = q.front();
                q.pop();
                //标记第一次遇到空节点
                if (cur == NULL) 
                    flag = true; 
                else{
                    //后续访问已经遇到空节点了,说明经过了叶子
                    if (flag) return false;
                    q.push(cur->left);
                    q.push(cur->right);
                }
            }
        }
        return true;
    }
};

算法性能分析

时间复杂度是 O(n),其中 n 是二叉树中的节点数。空间复杂度也是 O(n),因为最坏情况下,队列可能会包含所有节点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1966316.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Web安全学习顺序:从零到精通的指南

随着互联网的迅猛发展&#xff0c;Web安全已成为一个日益重要的领域。无论是企业还是个人&#xff0c;都需要关注并提升自身的Web安全防护能力。对于初学者而言&#xff0c;如何系统地学习Web安全知识&#xff0c;掌握相关技能&#xff0c;成为了一个亟待解决的问题。本文将为你…

C# 串口通信(通过serialPort控件发送及接收数据)

连接串口 界面设计打开串口发送数据通过文件发送发送数据 接收数据 首先可以在 工具箱中搜索serialport&#xff0c;将控件拖到你的Winfrom窗口。 界面设计 打开串口 private void Connect_Click(object sender, EventArgs e){serialPort1.PortName comboBox2.Text;//端口名s…

颜色传感器 - 从零开始认识各种传感器【二十三期】

颜色传感器|从零开始认识各种传感器 1、什么是颜色传感器 颜色传感器&#xff08;Color Sensor&#xff09;是一种能够检测和识别颜色的传感器&#xff0c;它广泛应用于工业自动化、机器人技术、智能家居、消费电子等领域。颜色传感器通过测量物体表面反射的光来确定其颜色&a…

类和对象(上) - c++

1.类的定义 1.1 类定义格式 class 是定义类的关键字 ,后跟类的名字,{}部分为类的主体,(注意:最后类定义结束时不要忘了 ; )。 类体中内容称为类的成员&#xff1a;类中的变量称为成员变量; 类中的函数称为成员函数。在c中,struct也可以定义类(c兼容c语言),同时struct升级成类…

武汉流星汇聚:跨境电商桥梁连接中国与世界,中国产品畅销全球

在全球经济一体化的大背景下&#xff0c;零售电商行业以其独特的魅力和无限潜力&#xff0c;正引领着全球商业模式的深刻变革。特别是中国卖家&#xff0c;通过跨境电商平台这一桥梁&#xff0c;轻松触达全球消费者&#xff0c;实现了商品的快速流通和市场的广泛覆盖&#xff0…

Spark 基础 与 安装

Spark 基础 一、MapReduce编程模型的局限性 1、繁杂&#xff1a;只有Map和Reduce两个操作&#xff0c;复杂的逻辑需要大量的样板代码 2、处理效率低&#xff1a; Map中间结果写磁盘&#xff0c;Reduce写HDFS&#xff0c;多个Map通过HDFS交换数据 任务调度与启动开销大 3、…

十城联动共建生态登陆山东 纷享销客从原厂型向生态型CRM进化

7月30日&#xff0c;纷享销客渠道生态伙伴发展共建会之山东专场盛大举行&#xff0c;百余家优秀伙伴到场共享CRM领域高质量增长新机遇。2024年&#xff0c;纷享销客将坚定不移地从原厂型向生态型CRM厂商进化&#xff0c;把伙伴们扶上马&#xff0c;送一程&#xff0c;共发展&am…

Java--异常

目录 异常的概念异常的体系结构异常抛出异常处理异常throws声明try-catch捕获 异常处理流程自定义异常类 异常的概念 Java中&#xff0c;程序执行过程中发生的不正常的行为称为异常。 我们之前学数组的时候可能会遇到的数组越界异常&#xff1a;ArrayIndexOutOfBoundsException…

Reeder + RSS+ - 订阅RSS信息

文章目录 引言ReederRSS 源微博Bilibilirsshub自己发现 feed RSS 使用 引言 信息越来越多&#xff0c;也层次不齐&#xff0c;难以花时间筛选&#xff0c;但也不能闭目塞听。 使用爬虫 每日定时 去爬取不同网站需要的信息&#xff0c;还是有些繁琐&#xff0c;又让人想到 RSS …

odoo 去掉新手简介

很多模块有这样的提示&#xff0c;这种是可以动态关闭的 菜单 设置-技术-入职 可以动态切换&#xff0c;是否再次展示

不同类型的生物反应器在支架成熟过程中具有哪些特点和应用?

3D Bioprinting of Human Tissues: Biofabrication, Bioinks, and Bioreactors是发表于《International Journal of Molecular Sciences》的一篇综述&#xff0c;详细介绍了3D生物打印人体组织的相关技术进展&#xff0c;包括数据处理、生物打印技术、生物墨水配方、生物反应器…

设计理念中——抽象与接口和用(C#)

前言 在程序设计中&#xff0c;使用抽象类还是用接口应该是一个需要考虑的场景&#xff0c;有时我们感觉这两者并没有太大的区别&#xff0c;有时又有很大区别。这里是一些说明和示例。 一、抽象类和接口 1、相同点&#xff1a; 1)都可以被继承 2&#xff09;都不能被实例化…

paddleSeg项目实战

问题1&#xff1a;cmake 编译报错 解决办法&#xff1a;添加一条语句 set(DEMO_NAME "test_seg") #这里的test_seg就是src里的文件名问题2&#xff1a; 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 LNK2038 检测到“RuntimeLibrary”的不匹配项: 值“MT_Stat…

汽车EDI中的常见术语以及流程详解

汽车EDI常见术语 EDI —— 电子数据交换3PL&#xff08;第三方物流&#xff09; —— 外包仓库/运输供应商。 一般用于售后市场&#xff0c;但偶尔也用于原始设备制造商。也可由原始设备制造商和售后市场公司用来分销产品。Aftermarket&#xff08;后市场&#xff09; —— 经…

详细阐述大模型微调过程、方法、案例

大模型微调 大模型微调&#xff08;Fine-tuning&#xff09;的定义是&#xff1a;在已经预训练好的大型深度学习模型基础上&#xff0c;使用新的、特定任务相关的数据集对模型进行进一步训练的过程。这种微调技术的主要目的是使模型能够适应新的、具体的任务或领域&#xff0c…

透明屏幕方案介绍

透明屏幕方案主要涉及透明显示屏的技术原理、应用场景、优势以及未来发展趋势等方面。以下是对透明屏幕方案的详细介绍&#xff1a; 一、技术原理 透明屏幕&#xff0c;特别是透明LED显示屏和透明OLED显示屏&#xff0c;采用了先进的技术原理来实现其独特的显示效果。 透明LED显…

牛客 KY11.二叉树遍历

牛客 KY11.二叉树遍历 思路&#xff1a; 我们接收字符串以后&#xff0c;创建一个二叉树结构体&#xff0c;然后就可以开始建立树&#xff0c;如果是字符就malloc新的结点去存储&#xff0c;是**#就返回空**&#xff0c;最后用递归以根左右的顺序创建结点。树建立完成后&#x…

Linux中防火墙实战之Web服务器和ssh远程服务配置指南

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f427;Linux基础知识(初学)&#xff1a;点击&#xff01; &#x1f427;Linux高级管理防护和群集专栏&#xff1a;点击&#xff01; &#x1f510;Linux中firewalld防火墙&#xff1a;点击&#xff01; ⏰️创作…

螺钉柱的设计

如果螺钉柱参数设置不合理&#xff0c;可能导致螺钉柱滑牙、爆裂、断裂、螺丝断裂、螺钉头磨损、螺钉攻入费力等问题 具体参数可以参照下表 螺丝柱设计尺寸&#xff1a; 螺丝柱设计要点&#xff1a; 频繁拆卸的注意事项&#xff1a; 自攻牙螺丝柱不宜频繁拆卸&#xff0c;因…

AI大模型应用(2)ChatGLM3本地部署及其在alpaca_zh数据集上的低精度微调

AI大模型应用(2)ChatGLM3部署及其在alpaca_zh数据集上的低精度微调 我们之前已经了解了HuggingFace中peft库的几种高效微调方法。 参数高效微调PEFT(一)快速入门BitFit、Prompt Tuning、Prefix Tuning 参数高效微调PEFT(二)快速入门P-Tuning、P-Tuning V2 参数高效微调PEFT…