BM35 判断是不是完全二叉树

news2024/9/28 17:33:27

题目

给定一个二叉树,确定他是否是一个完全二叉树。

完全二叉树的定义:若二叉树的深度为 h,除第 h 层外,其它各层的结点数都达到最大个数,第 h 层所有的叶子结点都连续集中在最左边,这就是完全二叉树。(第 h 层可能包含 [1~2h] 个节点)

数据范围:节点数满足 1≤n≤100

样例图1:

样例图2:

样例图3:

示例1

输入:{1,2,3,4,5,6}

返回值:true

示例2

输入:{1,2,3,4,5,6,7}

返回值:true

示例3

输入:{1,2,3,4,5,#,6}

返回值:false


思路

通过层序遍历来进行判断。

引入标志位isSecondStep,来区分当前遍历处在第一状态(isSecondStep==false)还是第二状态(isSecondStep==true)。

第一状态:

  1. 当前节点cur的左右子树都存在;
  2. 当前节点cur只有右树没有左树,是反例;
  3. 当前节点cur只有左树没有右树(cur是第一个碰到的只有左树没有右树的节点),需要切换为第二状态;
  4. 当前节点cur没有左树也没有右树(cur是第一个碰到的叶子节点),需要切换为第二状态。

第二状态:

  1. 第二状态中所有节点不可能有子树,有一个就是反例。

代码

import java.util.*;

public class Solution {
    public boolean isCompleteTree (TreeNode root) {
        if(root == null) {
            return true;
        }

        //层序遍历判断二叉树
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        //引入标志位,来区分当前遍历过程中处在第一阶段还是第二阶段
        //false是第一阶段;true是第二阶段
        boolean isSecondStep = false;

        while(!queue.isEmpty()) {
            TreeNode cur = queue.poll();
            if(!isSecondStep) {
                //此时处在第一阶段
                if(cur.left != null && cur.right != null) {
                    //当前cur左右子树全部都存在
                    queue.offer(cur.left);
                    queue.offer(cur.right);
                } else if(cur.left == null && cur.right != null) {
                    //此时只有右树没有左树,反例
                    return false;
                } else if(cur.left != null) {
                    //只有左树没有右树,此时cur是碰到的第一个只有左树的节点,切换状态
                    isSecondStep = true;
                    queue.offer(cur.left);
                } else {
                    //此时左树和右树全部为空,cur是第一个碰到的叶子节点
                    isSecondStep = true;
                }
            } else {
                //此时处在第二阶段,第二阶段中所有节点不可能有子树
                if(cur.left != null || cur.right != null) {
                    return false;
                }
            }
        }
        //遍历全结束,没有找到反例
        return true;
    }
}

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

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

相关文章

深入理解ConcurrentHashMap1.7源码

1. 概述 HashMap在我们的日常生活中使用很多&#xff0c;但是它不是线程安全的。我们可以使用HashTable来代替&#xff0c;主要实现方式是在方法中加入synchronized&#xff0c;所以效率也比较低。因此&#xff0c;对于键值对&#xff0c;我们可以尝试使用ConcurrentHashMap来…

实验室规划设计方案SICOLAB

一、实验室规划设计 喜格提供实验室布局方案 根据实验室性质、实验室定位、实验室功能、实验类型、实验工艺流程以及国家相关标准合理的规划布局。 喜格提供仪器摆放布局方案 根据该实验流程来确定仪器的种类、数量、规格型号、外形尺寸、电压功率等参数以及摆放位置以及提…

【Linux】tee、tail、killall、|、||、、命令学习

|、||、&、&&辨析 竖线‘|’在linux中是管道符的意思&#xff0c;将‘|’前面命令的输出作为’|后面的输入&#xff1b; 双竖线‘||’&#xff0c;用双竖线‘||’分割的多条命令&#xff0c;执行的时候遵循如下规则&#xff1a;如果前一条命令为真&#xff0c;则…

还在喷农民歌唱家大衣哥吗?他的一个不经意间的举动却造福了乡里

农民歌唱家大衣哥&#xff0c;一直以来都饱受争议&#xff0c;有人说他是炒货专家&#xff0c;然而事实真的如此吗&#xff1f;事实上&#xff0c;大衣哥也做了很多好事&#xff0c;像修桥补路等都不说了&#xff0c;单就他的一个不经意间的举动&#xff0c;就造福了四乡八邻。…

Windows内核--CPU和内核(1.7)

Windows内核支援哪些CPU? Intel x86/x86_64 IA64已不再支持. AMD amd64 ARM (Windows On Arm: WOA) ARM具备低功耗优势, 除了高通, 还有Broadcom/NXP等都支援ARM架构. 苹果自研M系列开了头&#xff0c;ARM不仅有低功耗&#xff0c;同样有性能&#xff0c;Windows也想分一杯羹…

【vue系列-03】vue的计算属性,列表,监视属性及原理

vue的核心属性一&#xff0c;vue核心属性1&#xff0c;计算属性2&#xff0c;监视属性3&#xff0c;样式绑定3.1&#xff0c;class样式绑定3.2&#xff0c;style样式绑定4&#xff0c;条件渲染5&#xff0c;列表渲染5.1&#xff0c;遍历列表5.2&#xff0c;key的作用5.3&#x…

2022年全国职业院校技能大赛中职组网络安全竞赛——隐写术应用解析(超详细)

2022年全国职业院校技能大赛中职组网络安全竞赛——隐写术应用解析(超详细) B-8任务八:隐写术应用 *任务说明:仅能获取Server8的IP地址 环境需求私信博主 1.找出文件夹1中的文件,将文件中的隐藏信息作为Flag值提交; 解题步骤如下 2.找出文件夹2中的文件,将文件中的隐藏信息…

基于Vue的数据可视化设计框架,数据大屏可视化编辑器

开发文档&#xff08;★★★★★&#xff09; 请访问 https://lizhensheng.github.io/vue-data-view/ 完整代码下载地址&#xff1a;基于Vue的数据可视化设计框架&#xff0c;数据大屏可视化编辑器 简介 DataView是一个基于Vue的数据可视化设计框架提供用于可拖拽的控件提供…

Spring之IOC入门案例

目录 一&#xff1a;IOC入门案例实现思路分析 1.IOC容器管理什么&#xff1f; 2. 如何将被管理的对象告知 IOC 容器 ? 3.被管理的对象交给 IOC 容器&#xff0c;要想从容器中获取对象&#xff0c;就先得思考如何获取到 IOC 容器 ? 4.IOC 容器得到后&#xff0c;如何从容…

C++首超Java

TIOBE 公布了 2022 年 12 月的编程语言排行榜。 TIOBE 将于下个月揭晓其 2022 年度编程语言&#xff0c;目前共有 3 个候选者&#xff1a;Python、C 和 C。TIOBE CEO Paul Jansen 指出&#xff0c;虽然 Python 和 C 已多次斩获该头衔&#xff0c;而 C 仅在 2003 年获得过一次&a…

Android---开发笔记

ListView控件 <ListViewandroid:id"id/main_iv"android:layout_width"match_parent"android:layout_height"match_parent"android:layout_below"id/main_top_layout"android:padding"10dp"android:divider"null&qu…

彩色圣诞树圣诞树

目录 一、圣诞介绍 二、技术需要 三、效果展示 四、实现步骤 五、颜色的更改 六、源码 一、圣诞介绍 基督教纪念耶稣诞生的重要节日。亦称耶稣圣诞节、主降生节&#xff0c;天主教亦称耶稣圣诞瞻礼。耶稣诞生的日期&#xff0c;《圣经》并无记载。公元336年罗马教会开始在…

JavaScript对象与类的创建

1、面向过程与面向对象 面向过程就是分析出解决问题所需要的步骤&#xff0c;然后用函数把这些步骤一步一步实现&#xff0c;使用的时候再一个一个的依次调用就可以了。面向对象是把事务分解成为一个个对象&#xff0c;然后由对象之间分工与合作。 面向过程与面向对象对比 面…

LeetCode11.盛水最多的容器

11. 盛最多水的容器 该题用的是贪心的思想&#xff0c;也即每一步都以更加靠近最值为目标&#xff0c;用双指针维护height数组&#xff0c;接下来我用我自己通俗的语言尽可能解释双指针这种做法的正确性&#xff1a; 首先双指针指向数组两端&#xff0c;从两端开始&#xff0…

必看!Salesforce发布2023年全球科技重要趋势和预测

Salesforce领导者处于影响企业的最新趋势、技术和挑战的前线&#xff0c;通过市场分析、客户对话等方面带来专业知识和洞察力。距离2023年还剩不到一周的时间&#xff0c;未来一年企业应该如何布局&#xff0c;技术会如何发展&#xff0c;值得我们密切关注。 企业需要了解的5项…

IB分数如何影响您的大学申请?

参加 2022 年 11 月 IB 考试的学生将于 1 月 2 日收到IBDP&IBDP相关课程的分数。 大多数在新加坡提供 IB 课程的国际学校都在每年 5 月参加考试。 但是有些学校在 11 月参加 IBDP 考试。其中包括圣约瑟国际学院(SJII)、英华学校(ACS)、澳大利亚国际学校(SAIS)、华中国际学校…

牛客竞赛每日俩题 - 动态规划3

目录 类01背包问题&#xff0c;选or不选 变种走方格 类01背包问题&#xff0c;选or不选 不同的子序列_牛客题霸_牛客网 问题翻译&#xff1a; S有多少个不同的子串与T相同 S[1:m]中的子串与T[1:n]相同的个数 由S的前m个字符组成的子串与T的前n个字符相同的个数 状态&#xf…

SHA3算法笔记

文章目录1 INTRODUCTION2 GLOSSARY3 KECCAK-p Permutations3.1 State3.1.2 Converting Strings to State Arrays3.1.3 Converting State Arrays to Strings3.1.4 Labeling Convention for the State Array3.2 Step Mappingsthetarhopichiiota3.3 KECCAK-p[b, n~r~]3.4 KECCAK-f…

如何使用 Blackbox Exporter 监控 URL?

前言 监控域名和 URL 是可观察性的一个重要方面&#xff0c;主要用于诊断可用性问题。接下来会详细介绍如何使用 Blackbox Exporter 和 Prometheus 在 Kubernetes 中实现 URL 监控。 Blackbox Exporter 简介 Blackbox Exporter 是 Prometheus 的一个可选组件&#xff0c;像其…

离散变量贝叶斯决策简介

贝叶斯决策 最小风险&#xff1a; min⁡R(αi∣x)∑j1cλ(αi∣ωj)P(ωj∣x)\min R\left(\alpha_i \mid \mathrm{x}\right)\sum_{j1}^c \lambda\left(\alpha_i \mid \omega_j\right) P\left(\omega_j \mid \mathrm{x}\right) minR(αi​∣x)j1∑c​λ(αi​∣ωj​)P(ωj​∣x…