码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 牛客每日刷题之二叉树


    ✅作者简介:我是18shou,一名即将秋招的java实习生

    ✨个人主页:_18shou

    🔥系列专栏:牛客刷题专栏

    📃推荐一款模拟面试、刷题神器👉 在线刷题面经模拟面试

    目录

    描述

    ​编辑

    思路

    题解

    ​编辑

    复杂度

    📃结语


    描述

    给定- -个二叉树,确定他是否是一个完全二 叉树。
    完全3二叉树的定义:若_ -叉树的深度为h,除第h层外,其它各层的结点数都达到最大个数,第h层所有的叶子结点都连续集中在最左边,这就是
    完全-叉树。(第h层可能包含 [1~2h]个节点)
    数据范围:节点数满足1≤n≤100

     

     

    思路

    方法:层次遍历(推荐使用)
    知识点:队列
    队列是一种仅支持在表尾进行插入操作、 在表头进行删除操作的线性表,插入端称为队尾,删除端称为队首,因整体类似排队的队伍而得名。它满
    足先进先出的性质,元素入队即将新元素加在队列的尾,元素出队即将队首元素取出,它后-个作为新的队首。
    思路:
    对完全二叉树最重要的定义就是叶子节点只能出现在最下层和次下层,所以我们想到可以使用队列辅助进行层次遍历一从 上到下遍历所有层,每
    层从左到右,只有次下层和最下层才有叶子节点,其他层出现叶子节点就意味着不是完全二叉树。
    具体做法:
    ●step 1:先判断空树一定是完全二 叉树。
    ●step 2:初始化一个队列辅助层次遍历,将根节点加入。
    ●step 3:逐渐从队列中弹出元素访问节点,如果遇到某个节点为空,进行标记,代表到了完全=叉树的最下层,若是后续还有访问,则说明提
    前出现了叶子节点,不符合完全二叉树的性质。
    ●step4:否则,继续加入左右子节点进入队列排队,等待访问。

    题解

    1. import java.util.*;
    2. public class Solution {
    3. public boolean isCompleteTree (TreeNode root) {
    4. //空树一定是完全二叉树
    5. if(root == null)
    6. return true;
    7. //辅助队列
    8. Queue<TreeNode> queue = new LinkedList<>();
    9. queue.offer(root);
    10. TreeNode cur;
    11. //定义一个首次出现的标记位
    12. boolean notComplete = false;
    13. while(!queue.isEmpty()){
    14. cur = queue.poll();
    15. //标记第一次遇到空节点
    16. if(cur == null){
    17. notComplete = true;
    18. continue;
    19. }
    20. //后续访问已经遇到空节点了,说明经过了叶子
    21. if(notComplete)
    22. return false;
    23. queue.offer(cur.left);
    24. queue.offer(cur.right);
    25. }
    26. return true;
    27. }
    28. }

     

    复杂度

    ●时间复杂度:
    0(n),其中n为二叉树节点数,层次遍历最坏情况下遍历每一个节虑
    .空间复杂度: 0(n),最坏情况下,层次队列的最大空间为O(n)

    📃结语

    兄弟们,一起来刷题👉嘎嘎的写题

  • 相关阅读:
    接口使用的最佳时机
    Java当中的队列
    Redis-SSM之spring注解式缓存
    通讯录多版本代码归纳
    设计一个填充工具完美解决前后端甩锅的问题了
    算术运算符、自增自减运算符、赋值运算符、关系运算符、逻辑运算符、三元运算符
    最大公约数——Hankson的趣味题(线筛法求质数+gcd+质因数组合搜索约数)
    【精讲】mustache表达式写法、vue常用指令、v-bind多种绑定事件、技能提升
    Linux | 进程间通信 | 匿名管道 | 命名管道 | 模拟代码实现进程通信
    Matlab 常用快捷键
  • 原文地址:https://blog.csdn.net/m0_60264772/article/details/126360683
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号