Leetcode.958 二叉树的完全性检验

news2024/11/16 18:51:17

题目链接

Leetcode.958 二叉树的完全性检验 Rating : 1703

题目描述

给定一个二叉树的 root,确定它是否是一个 完全二叉树 。

在一个 完全二叉树 中,除了最后一个关卡外,所有关卡都是完全被填满的,并且最后一个关卡中的所有节点都是尽可能靠左的。它可以包含 12h节点之间的最后一级 h

示例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 的结点没有尽可能靠向左侧。

提示:

  • 树的结点数在范围 [1, 100]内。
  • 1 < = N o d e . v a l < = 1000 1 <= Node.val <= 1000 1<=Node.val<=1000

分析:

按照 完全二叉树 的性质。使用 层序遍历,在遇到 第一个空结点 之后,后面的应该都是空结点

如果后面还遇到了非空结点,说明该二叉树不是 完全二叉树。

时间复杂度: O ( n ) O(n) O(n)

C++代码:

class Solution {
public:
    bool isCompleteTree(TreeNode* root) {
        queue<TreeNode*> q;
        q.push(root);
       
        //flag 为true 说明已经遇到了空结点
        bool flag = false;

        while(!q.empty()){
            auto t = q.front();
            q.pop();

            if(flag && t != nullptr) return false;

            if(t == nullptr){
                flag = true;
                continue;
            }

            q.push(t->left);
            q.push(t->right);
        }
        return true;
    }
};

Java代码:

class Solution {
    public boolean isCompleteTree(TreeNode root) {
        Queue<TreeNode> q = new LinkedList<>();
        q.offer(root);

        boolean flag = false;

        while(!q.isEmpty()){
            TreeNode t = q.poll();

            if(flag && t != null) return false;

            if(t == null){
                flag = true;
                continue;
            }

            q.offer(t.left);
            q.offer(t.right);
        }
        return true;
    }
}

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

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

相关文章

【郭东白架构课 模块一:生存法则】11|法则五:架构师为什么要关注技术体系的外部适应性?

你好&#xff0c; 我是郭东白。 前四条法则分别讲了目标、资源、人性和技术周期&#xff0c;这些都与架构活动的外部环境有关。那么今天我们来讲讲在架构活动内部&#xff0c;也就是在架构师可控的范围内&#xff0c;应该遵守哪些法则。今天这节课&#xff0c;我们就先从技术体…

乡村振兴研究:全网最全指标农村经济面板数据(2000-2021年)

数据来源&#xff1a;国家统计局 时间跨度&#xff1a;2000-2021年 区域范围&#xff1a;全国31省 指标说明&#xff1a; 部分样例数据&#xff1a; 行政区划代码地区年份经度纬度乡镇数(个)乡数(个)镇数(个)村民委员会数(个)乡村户数(万户)乡村人口(万人)乡村从业人员(万人…

通过4个月的自动化学习,现在我也拿到了25K的offer

毕业后的5年&#xff0c;是拉开职场差距的关键时期。有人通过这5年的努力&#xff0c;实现了大厂高薪&#xff0c;有人在这5年里得到贵人的赏识&#xff0c;实现了职级的快速拔升&#xff0c;还有人在这5年里逐渐掉队&#xff0c;成了职场里隐身一族&#xff0c;归于静默。 而…

如何高效远程维护分布在海外的中大型智能设备?

一、行业需求 随着越来越多的企业进行全球化经营&#xff0c;设备制造商和系统集成商的设备分布到全球各地&#xff0c;数量多而且分散&#xff0c;传统的设备运维方式&#xff0c;面临着出差成本高&#xff0c;工作效率低&#xff0c;服务不及时等问题&#xff0c;客户常常因…

华为手表开发:WATCH 3 Pro(8)获取位置服务

华为手表开发&#xff1a;WATCH 3 Pro&#xff08;8&#xff09;获取位置服务初环境与设备文件夹&#xff1a;文件新增第二页面geolocation.hmlgeolocation.js修改首页 -> 新建按钮 “ 跳转 ”index.hmlindex.js 引用包&#xff1a;system.router首页效果点击结果按钮跳转后…

【Linux详解】——文件基础(I/O、文件描述符、重定向、缓冲区)

&#x1f4d6; 前言&#xff1a;本期介绍文件基础I/O。 目录&#x1f552; 1. 文件回顾&#x1f558; 1.1 基本概念&#x1f558; 1.2 C语言文件操作&#x1f564; 1.2.1 概述&#x1f564; 1.2.2 实操&#x1f564; 1.2.3 OS接口open的使用&#xff08;比特位标记&#xff09;…

【Java基础】023 -- 集合进阶(List、Set、泛型、树)

目录 一、集合的体系结构 1、单列集合&#xff08;Collection&#xff09; 二、Collection集合 1、Collection常见方法 ①、代码实现&#xff1a; ②、contains方法重写equals方法示例&#xff1a;&#xff08;idea可自动重写&#xff09; 2、Collection的遍历方式&#xff08;…

拂晓·微信机器人

前言 本项目是基于千寻微信框架进行的功能开发&#xff0c;采用SpringBoot青云客机器人进行开发。 千寻初衷是想开源一个框架的写法&#xff0c;并不是为了用来运营&#xff0c;因此功能不全&#xff0c;所以使用和适配前请查看是否与自己需求匹配。 因此本文主要通过千寻客…

JVM详解——类的加载

文章目录类的加载1、Java程序如何运行2、Java字节码文件3、类加载4、类加载的过程5、类加载器6、类的加载方式7、类的加载机制8、双亲委派机制9、破坏双亲委派机制类的加载 1、Java程序如何运行 首先通过Javac命令将.java文件编译生成.class字节码文件。 Javac是Java编译命令&a…

【IOS逆向】frida-trace小计

【IOS逆向】frida-trace小计 当越狱完成之后&#xff0c;可以尝试品尝下frida frida-trace 用于跟踪函数或者 Objective-C 方法的调用&#xff0c;frida-trace -h 能够查看它的帮助&#xff0c;最重要的有下面几个参数&#xff1a; -i 跟踪某个函数&#xff0c;-x 排除某个函…

链表OJ(三) 反转链表合集

目录 反转链表 反转链表 II 链表中的节点每k个一组翻转 描述 给定一个单链表的头结点pHead(该头节点是有值的&#xff0c;比如在下图&#xff0c;它的val是1)&#xff0c;长度为n&#xff0c;反转该链表后&#xff0c;返回新链表的表头。 数据范围&#xff1a; 0≤n≤10000≤…

开发必备的IDEA 插件!效率提升 50 倍!

日常开发中&#xff0c;面向百度编程的程序员&#xff0c;很多时候&#xff0c;你跟大佬级别的差距&#xff0c;可能不仅仅是知识面的差距&#xff0c;还有就是开发效率的差距。以下是我常用的几个IDEA插件&#xff0c;废话不多说&#xff0c;直接肝干货&#xff01; 1. Codot…

庄懂的TA笔记(十二)<>

庄懂的TA笔记&#xff08;十二&#xff09;&#xff1c;&#xff1e;一、作业展示&#xff0c;答疑&#xff1a;1、作业&#xff1a;2、答疑&#xff1a;二、作业示范&#xff0c;分析&#xff1a;1、文档分析&#xff1a;2、资源分析&#xff1a;3、资源优化&#xff1a;4、光…

Linux下的进程控制

目录 退出码 终止进程 进程等待 进程程序替换 自己实现简易shell命令行 内建命令 退出码 在编写代码时main函数内部我们通常都使用return 0;结尾&#xff0c;以此标识正常退出。这里的return 0就是所谓的退出码&#xff0c;Linux下也是一样&#xff1a; 看这个小程序&…

【Opencv 系列】第1章 图像基础

通过本套课程,可以学到: 1.opencv的基本操作 2.两个案例,目标追踪&人脸识别 对重点内容,我会提示,包括我再准备这套课程过程中遇到的坑点! 最后代码我会放到git上,章节顺序一致:https://github.com/justinge/opencv_tutorial.git 系列文章目录 第1章 Opencv 图像基础 和 …

21基于二阶锥规划的主动配电网最优潮流求解

参考文献&#xff1a;主动配电网多源协同运行优化研究-乔珊主动配电网最优潮流研究及其应用实例-高红均主要内容&#xff1a;CPLEX二阶锥规划考虑WindCBSVGOLTCESS多时段24h&#xff0c;骨灰级注释&#xff0c;一看就懂&#xff01;&#xff01;&#xff01;部分程序&#xff1…

基于注意力的知识蒸馏Attention Transfer原理与代码解析

paper&#xff1a;Paying More Attention to Attention: Improving the Performance of Convolutional Neural Networks via Attention Transfercode&#xff1a;https://github.com/megvii-research/mdistiller/blob/master/mdistiller/distillers/AT.py背景一个流行的假设是存…

SpringCloudAlibaba-Sentinel

一、介绍官网&#xff1a;https://github.com/alibaba/Sentinel/下载jar包,启动,访问http://localhost:8080/创建module添加如下依赖<!--SpringCloud ailibaba sentinel --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring…

内网渗透(四十)之横向移动篇-ms14-068传递获取域管横向移动

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…

[软件工程导论(第六版)]第2章 可行性研究(复习笔记)

文章目录2.1 可行性研究的任务2.2 可行性研究过程2.3 系统流程图2.4 数据流图概念2.5 数据字典2.6 成本/效益分析2.1 可行性研究的任务 可行性研究的目的 用最小的代价在尽可能短的时间内确定问题是否能够解决。 可行性研究的3个方面 &#xff08;1&#xff09;技术可行性&…