【LeetCode笔记】958. 二叉树的完全性检验(Java、二叉树、BFS)

文章目录

  • 题目描述
  • 思路 && 代码
      • 层级遍历法
      • BFS
      • 二刷

题目描述

  • 考察对完全二叉树性质的理解
    在这里插入图片描述

思路 && 代码

层级遍历法

  • 一开始试了自底向上的DFS,过了90%的用例,还是考虑得不够全 = =
  • 层级遍历:代码比较多,但是总体效率和方法2差不多
/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {Deque<TreeNode> queue = new ArrayDeque<>();public boolean isCompleteTree(TreeNode root) {queue.offer(root);return bfs(1, 1);}public boolean bfs(int nodeNums, int except) {if(queue.size() == 0) {return true;}int counts = 0;boolean flag = false;for(int i = 0; i < nodeNums; i++) {TreeNode tempNode = queue.pop();if(tempNode.left != null) {if(flag) {return false;}queue.offer(tempNode.left);counts++;}else {flag = true;}if(tempNode.right != null) {if(flag) {return false;}queue.offer(tempNode.right);counts++;}else {flag = true;}}if(nodeNums != except && !queue.isEmpty()) {return false;}return bfs(counts, 2 * except);}
}

BFS

  • 注意:要使用能存储 null 值的集合类(比如 ArrayDeque 就不行)
  • 核心思路:当前节点为空时,如果后面(包括右边、下面)有节点则不是完全二叉树。
class Solution {// 完全二叉树判断:当前节点为空时,后面(包括右边、下面)不能有节点public boolean isCompleteTree(TreeNode root) {LinkedList<TreeNode> queue = new LinkedList<>();queue.offer(root);for(TreeNode cur = queue.poll(); cur != null; cur = queue.poll()) {queue.offer(cur.left);queue.offer(cur.right);}// 如果之后还有非空元素,说明不是完全二叉树while(!queue.isEmpty()) {if(queue.poll() != null) {return false;}}return true;}
}

二刷

class Solution {public boolean isCompleteTree(TreeNode root) {// jojo的奇妙做法。。不知道怎么想的,反正 A 了,问题不大!List<TreeNode> list = new LinkedList<>();Queue<TreeNode> queue = new ArrayDeque<>();queue.offer(root);list.add(root);while(!queue.isEmpty()) {TreeNode temp = queue.poll();list.add(temp.left);list.add(temp.right);if(temp.left != null) {queue.offer(temp.left);}if(temp.right != null) {queue.offer(temp.right);}}boolean flag = false;for(TreeNode temp : list) {if(temp == null) {flag = true;} else if (flag) {return false;}}return true;}
}
  • 简单写法,八行代码光速解决~
class Solution {public boolean isCompleteTree(TreeNode root) {LinkedList<TreeNode> queue = new LinkedList<>();for(TreeNode cur = root; cur != null; cur = queue.poll()) {queue.offer(cur.left);queue.offer(cur.right);}while(!queue.isEmpty()) {if(queue.poll() != null) {return false;}}return true;}
}

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

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

相关文章

【学习笔记】结合代码理解设计模式 —— 代理模式(静态代理、动态代理、延伸)

文章目录什么是代理模式一. 代理模式简介二. 静态代理模式三. 动态代理模式万能模版前言&#xff1a;笔记基于狂神设计模式视频、《大话设计模式》观后而写 &#xff08;最近一直在更新之前的刷题博客&#xff0c;今天久违地更新一篇新博客啦&#xff5e;&#xff09; 什么是代…

js 正则 长度不超过50_如何花不超过50元人民币,拍抖音网红海马体照片?

前段时间&#xff0c;抖音上的海马体-网红照一夜间爆发&#xff01;火了&#xff01;海马体照相馆又一次被推上了时尚潮流的打卡风口&#xff0c;深受年轻群体的青睐。其中当然也包括我~这个风我还是特别想要跟一波的。但是想必大家都知道&#xff0c;海马体照相馆生意一直火爆…

多核处理器_英特尔十代酷睿i5-10400大战R5 3600,到底谁是千元处理器一霸?

Hello大家好&#xff0c;我是兼容机之家的小牛。要说英特尔十代酷睿中最走量的处理器&#xff0c;莫过于i5 10400这颗千元神U了。最近我们兼容机之家推出了几款搭载i5 10400等十代酷睿CPU的主机&#xff0c;性价比非常不错&#xff0c;小伙伴可以翻看一下我们往期的文章。今天就…

项目日报模板_第一届全国技能大赛现场直击:混凝土建筑项目全场最“高”

大洋网讯 混凝土建筑项目的比赛场馆位于室外&#xff0c;高达12米&#xff0c;让这个项目成为全场最“高”项目。“在现代化大型工地&#xff0c;都是用泵车浇灌混凝土&#xff0c;我们这里比赛也模拟了这一个工地的现实场景&#xff0c;让选手使用泵车浇灌混凝土。泵车的手臂要…

【LeetCode笔记】51. N 皇后(DFS、经典题)

文章目录题目描述思路 && 代码题目描述 经典题了…但是大一敲过后就再没碰过了。结果面试还是会问 &#xff0c;今天补一下&#xff5e; 思路 && 代码 还是挺清晰的&#xff0c;要点如下&#xff1a; 使用 DFS&#xff0c;找到一个了再继续找对每一行&…

表格c1等于a1加b1_中国最牛驾照,C1、B1、B2、A1、A2随便开,被称为万能的驾照!...

导读&#xff1a;中国最牛驾照&#xff0c;C1、B1、B2、A1、A2随便开&#xff0c;被称为万能的驾照&#xff01;现在社会上的汽车越来越多了&#xff0c;而车主们&#xff0c;想要行车上路&#xff0c;除了要有车&#xff0c;还要有一样必须的东西&#xff0c;那就是驾照。驾照…

【LeetCode笔记】117.填充每个节点的下一个右侧节点指针 II(二叉树、DFS)

文章目录题目描述思路 && 代码题目描述 很烦…面试被这题干碎了&#xff0c;赶紧给查漏补缺一波&#xff01; 思路 && 代码 主要思路&#xff1a;先右&#xff0c;再左&#xff08;因为左边依赖右边&#xff01;&#xff09;getNext()&#xff1a;当前节点…

r720支持多少频率的内存吗_电脑基础知识:内存条知识大全,看完小学生都了解...

一、基础知识如果你不了解内存条&#xff0c;如果你只知道内存容量越大越好&#xff0c;如果你想更加了解内存条&#xff0c;不妨来看看这里&#xff0c;今天给大家分享那些最简单也是最容易理解的内存条知识。1、定义、作用内存条又叫随机存取存储器&#xff0c;是一种存储技术…

关键词堆砌生成器_网络推广软件的使用和24种关键词挖掘方法

第398-399期网络推广学习&#xff0c;主讲课程&#xff1a;推广软件的使用和24种关键词的挖掘方法。具体内容如下&#xff1a;一、商务卫士&#xff08;宣传易&#xff09;主要的功能&#xff1a;1.商情推广2&#xff0c;产品添加&#xff08;20个以上&#xff09;3.百宝箱>…

【LeetCode笔记】299. 猜数字游戏 (Java、偏数学)

文章目录题目描述思路 && 代码题目描述 顶级阅读题&#xff01;今天的每日一题&#xff0c;感觉评论区大佬的写法挺值得记录的&#xff0c;就又水了一篇答题文&#xff5e; 思路 && 代码 O(n)、O(1)核心代码&#xff1a;Case 2 的两个 if 处理&#xff0c;…

currenthashmap如何实现线程安全_什么是多线程?如何实现多线程?

什么是进程&#xff1f;电脑中时会有很多单独运行的程序&#xff0c;每个程序有一个独立的进程&#xff0c;而进程之间是相互独立存在的。比如下图中的QQ、酷狗播放器、电脑管家等等。什么是线程&#xff1f;进程想要执行任务就需要依赖线程。换句话说&#xff0c;就是进程中的…

【LeetCode笔记 - 每日一题】375. 猜数字游戏 II (Java、DFS、动态规划)

文章目录题目描述思路 && 代码DFS动态规划新系列&#xff5e;用于区分开高频题和每日一题&#xff5e; 题目描述 一眼二分&#xff0c;但是实际上并不是这题让我想到社团的猜数字游戏…但是给钱是真过分了 思路 && 代码 DFS 自底向上进行递归。Math.max(…

【LeetCode笔记 - 每日一题】318. 最大单词长度乘积(Java、位运算)

文章目录题目描述思路 && 代码题目描述 挺不错&#xff01;有bitmap的感觉了。 思路 && 代码 思路好想&#xff1a;两两对比&#xff0c;无公共判断&#xff0c;维护 res那么&#xff0c;如何进行公共判断&#xff1f;这个是主要的问题给每个字符串&#x…

技术交底软件_【干货分享】软件类产品如何进行专利挖掘与技术交底书撰写?...

“导读&#xff1a;在很多人的认知里&#xff0c;软件著作权是软件著作权&#xff0c;专利是专利&#xff0c;两者并没有太多关联。甚至有的人认为&#xff0c;软件产品只能申请软件著作权保护&#xff0c;不能申请专利保护。但是&#xff0c;当有人抄袭你的软件设计理念&#…

【LeetCode笔记 - 每日一题】384. 打乱数组(Java、洗牌算法)

文章目录题目描述思路 && 代码题目描述 中等题&#xff0c;很赞&#xff01;第一次碰到涉及洗牌算法的题有点涉及概率&#xff0c;主要是要实现公平的随机 思路 && 代码 采用了 Knuth 洗牌算法&#xff0c;可以看看这篇博客时间复杂度O(N)&#xff0c;空间…

【LeetCode笔记 - 每日一题】423. 从英文中重建数字(Java、字符串、偏思路)

文章目录题目描述思路 && 代码题目描述 看了题目以后想到啥&#xff1f; 字符数量统计银行家算法逐个拆解建立数字 - 字符串的全局映射 思路 && 代码 抄答案了&#xff0c;采取了评论区三叶dalao的写法&#xff08;不得不说&#xff0c;人家的处理写法是真…

字符串的地址_面试题:我有一批IPv6地址,你帮我想个办法来存储?

作者&#xff1a;dadiyang-绪扬来源&#xff1a;公众号Java面试那些事儿之前写了一篇《面试题&#xff1a;请用代码实现ip地址与int之间互换&#xff1f;》&#xff0c;有读者评论问到 IPv6 的转换方法&#xff0c;于是抽时间也自己实现了一下。面试官&#xff1a;我有一批IPv6…

【LeetCode笔记 - 每日一题】519. 随机翻转矩阵(Java、随机、双指针)

文章目录题目描述思路 && 代码题目描述 又是涉及到均等概率的随机&#xff5e; 思路 && 代码 用的题解区三叶的代码&#xff5e;写得是真的好&#xff01;不论题目&#xff0c;但抄一遍代码都能觉得有收获&#xff01;维度转化&#xff1a;并没有创造二维数…

当前操作系统缺少黑体等字体_从零开始开发一个操作系统

在2019年的最后一天终于完成了整个系统的开发&#xff0c;并给它起名曰——Inios 。就如同文章名字一样&#xff0c;完全是从内核编写&#xff0c;非二次开发&#xff0c;从最初的“hello os”到初次有了系统的样子。主要用C语言编写&#xff0c;部分汇编语言。。整个操作系统完…

db设计专用excel_独家|自卸车如何实现侧板结构快速设计,减少重复工作?

作者| 张凯 汉阳专用汽车研究所科研技术部工程师 主要从事专用汽车产品结构仿真与轻量化随着城市发展的步伐不断加快&#xff0c;适用于各种工况的自卸车、城市渣土车市场需求量不断增大。目前市场自卸车车厢主要有两种&#xff1a;U型车厢和普通矩形车厢。其中U型车厢自卸车&a…