leetcode 958.二叉树的完全性检验
1.题目要求:
给你一棵二叉树的根节点 root ,请你判断这棵树是否是一棵 完全二叉树 。在一棵 完全二叉树 中,除了最后一层外,所有层都被完全填满,并且最后一层中的所有节点都尽可能靠左。最后一层(第 h 层)中可以包含 1 到 2h 个节点。

2.题目代码:
/*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*///创建队列
typedef struct queue{struct TreeNode* data;struct queue* next;
}queue_t;
//入队
void push(queue_t** head,struct TreeNode* data){queue_t* newnode = (queue_t*)malloc(sizeof(queue_t));newnode->data = data;newnode->next = NULL;if(*head == NULL){*head = newnode;return;}queue_t* tail = *head;while(tail->next != NULL){tail = tail->next;}tail->next = newnode;
}
//出队
struct TreeNode* pop(queue_t** head){struct TreeNode* x = (*head)->data;(*head) = (*head)->next;return x;
}
bool isCompleteTree(struct TreeNode* root) {int node_count = 0;//设置结点个数int* level_travel_node = (int*)malloc(sizeof(int) * 200);//记录最后一层的标记数组int j = 0;int depth = 0;queue_t* quence = NULL;int count = 1;int nextcount = 0;int size = 0;//层序遍历开始push(&quence,root);size++;node_count++;while(size != 0){depth++;for(int i = 0;i < count;i++){struct TreeNode* temp = pop(&quence);size--;if(temp->left != NULL){push(&quence,temp->left);size++;node_count++;nextcount++;}if(temp->right != NULL){push(&quence,temp->right);size++;node_count++;nextcount++;}}count = nextcount;nextcount = 0;}//判断结点数,如果节点数为1,则直接返回trueif(node_count == 1){return true;}else{//如果节点数不为1,则判断结点总数是否符合完全二叉树的结点范围,不符合直接返回falseif(node_count >= (int)pow(2,depth -1)&&node_count <= ((int)pow(2,depth) - 1)){printf("%d ",node_count);int depth_t = 0;size = 0;count = 1;int remove_line_count = 0;//记录除最后一行的节点数量nextcount = 0;push(&quence,root);size++;remove_line_count++;//再次进行层序遍历,一直遍历到倒数第二次位置while(size != 0){depth_t++;//判断是否为倒数第二层 if(depth_t != depth - 1){for(int i = 0;i < count;i++){struct TreeNode* temp = pop(&quence);size--;if(temp->left != NULL){push(&quence,temp->left);size++;remove_line_count++;nextcount++;}if(temp->right != NULL){push(&quence,temp->right);size++;remove_line_count++;nextcount++;}}count = nextcount;nextcount = 0;}else{//是倒数第二层后,把最后一层的结点进行记录,如果为空为-1,不为空为1for(int i = 0;i < count;i++){struct TreeNode* temp = pop(&quence);size--;if(temp->left != NULL){level_travel_node[j] = 1;j++;}else{level_travel_node[j] = -1;j++;}if(temp->right != NULL){level_travel_node[j] = 1;j++;}else{level_travel_node[j] = -1;j++;}}break;}}//判断除最后一层的结点数量,如果不对,则返回falseif(remove_line_count != ((int)pow(2,depth - 1) - 1)){return false;}else{int i = 0;for(i = 0;i < j;i++){if(level_travel_node[i] == -1){break;}}//如果-1后的结点有1,则为错,如果不是则为trueint j_1 = i + 1;for(j_1 = i + 1;j_1 < j;j_1++){if(level_travel_node[j_1] == 1){return false;}}return true;}}else{return false;}}
}
解题步骤都在代码里了,虽然比较繁琐,但如果大家觉得好的话,可以给个免费的赞吗,谢谢了^ _ ^
相关文章:
leetcode 958.二叉树的完全性检验
1.题目要求: 给你一棵二叉树的根节点 root ,请你判断这棵树是否是一棵 完全二叉树 。在一棵 完全二叉树 中,除了最后一层外,所有层都被完全填满,并且最后一层中的所有节点都尽可能靠左。最后一层(第 h 层)…...
Spring 中请求作用域的数据存储在 ThreadLocal 中还是 Spring 容器中?
微信中阅读,欢迎👏👏👏关注公众号:CodeFit 。 创作不易,如果你觉得这篇文章对您有帮助,请不要忘了 点赞、分享 和 关注,为我的 持续创作 提供 动力! 最近看到一个有趣的问题,Request Scope(请求作用域) 的数据是存储在 ThreadLocal 中,还是 Spring 容器中? 事…...
基础岛 - 8G显存验证书生·浦语大模型的Demo
因为以前用过LMDeploy,所以本章的内容相对熟悉。 另外,因为教程写的很详细保姆级,所以大多数情况直接复制执行命令即可。开发机的创建略过。 总体验证结论: LMDeploy的模型加载有点慢,但推理速度快,符合预…...
Jangow靶机攻略
搭建jangow靶机环境https://download.vulnhub.com/jangow/jangow-01-1.0.1.ova 虚拟机载入镜像文件 1.扫描目标主机地址 2.打开靶机环境 3.输入id查看回显位置 4.编辑一句话木马注入echo <?php eval($_POST[cmd]);?> > test.php 5.接下来查看文件输入ls 6.使用工具…...
Vue项目通过宝塔部署之后,页面刷新后浏览器404页面
目录 报错 解决方法 报错 将vue项目在宝塔上部署, 当项目挂载到服务器上去,进行浏览器的访问,是能正常访问的,可是当我们在浏览器上进行刷新之后,浏览器会给我们返回一个404的页面。 解决方法 (1&#…...
Java一一一简易图书管理系统
Java一一一简易图书管理系统 1. 需求分析 功能需求: 添加图书删除图书更新图书信息查询图书列出所有图书 2. 设计 实体类:Book业务逻辑类:LibraryManager 3. 实现 3.1 Book类 public class Book {private String id;private String t…...
Ubuntu配置carla docker环境
前言: 本文只在以下设备成功运行, 其他设备不保证能成功, 可以参考在自己设备进行配置 环境 ubuntu 20.04carla 0.9.15gpu 3060(notebook) 安装显卡驱动&nvidia-container-toolkit 显卡驱动 安装完成系统后直接在’软件和更新->附加驱动’直接选择470(proprietary…...
超越sd3!比肩Midjourney-v6?AI绘画大模型FLUX1.0详细评测与本地部署方法(附安装文件)
FLUX.1模型是什么? FLUX模型是一个开源的AI图像生成模型,由黑森林工作室研发。 堪比sd3以及Midjourney-v6 背景/backdrop 黑森林工作室(Black Forest Labs)由前Stability AI核心成员团队成立,专注于开发高级生成式…...
帆软填报报表单元格根据其它单元格内容决定另外的单元格可筛选什么值
效果图: 方法有三种: 方法一: 添加链接描述...
一键浪漫的回忆:微软开源的修复工具!!【送源码】
项目介绍 “Bringing-Old-Photos-Back-to-Life”是一款由微软开发的创新软件解决方案,它利用人工智能技术来修复和增强老旧照片的质量。这款工具可以解决老旧照片中常见的问题,如褪色、低分辨率以及物理损坏(如划痕和撕裂)。通过采…...
力扣-240.搜索二维矩阵(2)
刷力扣热题–第二十七天:240.搜索二维矩阵(2) 新手第二十七天 奋战敲代码,持之以恒,见证成长 1.题目简介 2.题目解答 这道题的想法就是,整体遍历,在遇到比target还大的,就停止这行的遍历,然后转过去继续遍历下一行,如果有一行的开头大于target,直接返回…...
Python推导式和生成器表达式
Python推导式 Python推导式是一种可以从一个数据序列构建另一个新的数据序列的结构体。 除了列表推导式 (list comprehension) 以外,还有字典(dict)、集合(set)推导式。它们的语法格式如下: # 列表:使用方括号 [expression for item in it…...
比较支持向量机、AdaBoost、逻辑斯谛回归模型的学习策略与算法
(1)支持向量机:SVM 是一种监督学习算法,用于分类和回归任务。 学习策略:间隔最大化 算法:最大间隔法、软间隔算法。 参数学习:参数学习过程是要最小化目标函数,通常通过优化算法(如SMO&#x…...
Android顶部标题栏自定义,添加按钮
1. 先写一个标题栏的layout, 放在工程的res/layout下,如下: <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_par…...
Spring Boot 整合 Dubbo3 + Nacos 2.4.0【进阶】+ 踩坑记录
上一篇文章中,Spring Boot 整合 Dubbo3 Nacos 2.4.0 进行了简单的集成使用,此文简单进阶并记录踩坑日常; Nacos 2.4.0 增加鉴权的配置Nacos 2.4.0 配置 MySQLNacos2.4.0 的热更新Dubbo3 自动负载Dubbo3 的重试和超时机制踩坑记录 一、Nacos…...
浙江省食品安全管理员题库及答案
1、《中华人民国食品安全法》从(C)起施行。 A.2009年1月1日 B.2009年5月1日 C.2009年6月1日 D.2009年10月1日 2、《中华人民国食品安全法》包括 (D). A.九章共一百零一条 B.十章共一百零一条 C.九章共一百零四条 D.十章共一百零…...
C++ 几何算法 - 求两条直线交点
一:算法介绍 1. 首先定义两条直线方程: 2. 解方程,求出x, y坐标 3. 如果x分母的行列式等于0, 说明两条直线平行或方向相反 4. 如果x,y分母的行列式都等于0,说明两条线重叠 二:代码实现: #include <cmath> #include <iostream>class Point2D { public:doubl…...
Linux操作系统简介
今天给伙伴们分享一下Linux 操作系统简介,希望看了有所收获。 我是公众号「想吃西红柿」「云原生运维实战派」作者,对云原生运维感兴趣,也保持时刻学习,后续会分享工作中用到的运维技术,在运维的路上得到支持和共同进步…...
【Python机器学习】回归——缩减系数来“理解”数据
如果数据特征比样本点还多,是不可以使用线性回归的,因为在计算的时候会出错。 如果特征比样本点还多(n>m),也就是说输入数据的矩阵x不是满秩矩阵。非满秩矩阵在求逆时会出问题。 为了解决上述问题,可以…...
组件设计原则
state数据结构设计 用数据描述所有内容数据要结构化,易于程序操作(遍历、查找)数据要可扩展,以便增加新的功能 组件设计组件通讯 从功能上拆分层次尽量让组件原子化容器组件(只管理数据)& UI组件&am…...
HoRain云--SeleniumGrid4完全指南:分布式测试实战
🎬 HoRain云小助手:个人主页 🔥 个人专栏: 《Linux 系列教程》《c语言教程》 ⛺️生活的理想,就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!…...
IEEE Trans系列期刊投稿指南:如何高效命中CCF-B类1区Top期刊(附最新录用案例)
IEEE Trans系列期刊高效投稿策略:从选题到录用的全流程实战指南 在学术研究领域,IEEE Transactions系列期刊始终代表着工程技术学科的最高水准。对于国内高校教师、科研人员及博士生而言,成功在CCF-B类1区Top期刊发表论文,不仅意味…...
工厂智能电表远程抄表系统C#源代码案例:实时监控与报表生成功能
工厂智能电表远程抄表系统项目,成功案例,源代码,C#语言,可监控24小时厂区总用电量波形图,单表24小时用电量波形图。 可自动导出多种不同形式excel表,厂区单月各表用电量,厂区各表电量值…...
实战应用:基于快马平台构建支持高并发的医院预约系统后端服务
今天想和大家分享一个实战项目:基于InsCode(快马)平台构建医院预约系统后端服务的经验。这个系统需要处理高并发预约、确保数据一致性,还要对接短信通知等第三方服务,对代码健壮性要求很高。 系统架构设计 医院预约系统的核心是要解决"…...
Modbus调试工具实战指南:从安装到读写操作
1. Modbus调试工具入门指南 第一次接触Modbus调试工具时,我也被各种专业术语搞得晕头转向。后来在实际项目中摸爬滚打才发现,掌握几个核心工具就能解决90%的调试问题。Modbus作为工业领域最常用的通信协议之一,它的调试工具就像是电工手中的万…...
跨场景事件:没人聊但人人踩的持久化问题
目录根本矛盾静态事件:幽灵订阅问题实例事件:随场景消亡DontDestroyOnLoad 创可贴Bootstrap 场景模式多场景编辑让情况更糟生命周期问题GES 如何解决这个问题ScriptableObject 事件存在于场景之外Behavior Window:自动生命周期管理Persistent…...
12. C++14新特性-字符串操作与标准用户定义字面量
一、引言C11 引入了用户定义字面量(User-Defined Literals, UDL)的底层机制,允许开发者通过重载 operator "" 为基础类型附加上下文语义。然而,C11 标准库自身并未提供预置的后缀实现。C14 填补了这一标准库层面的空白&…...
从《糖豆人》到《Among Us》:拆解Unity NetCode中NetworkTransform如何塑造不同的联机手感
从《糖豆人》到《Among Us》:NetworkTransform如何定义联机游戏的灵魂手感 当你在《糖豆人》的旋转平台上与对手挤作一团时,那种略带延迟的物理碰撞反馈;或是《Among Us》中看着队友角色突然"瞬移"到另一个房间的诡异同步——这些…...
利用Google Earth与KML技术高效提取数字高程等高线
1. 从零开始认识数字高程与KML技术 数字高程模型(DEM)就像给地球表面拍了一张"立体照片",它能精确记录每个位置的海拔高度。我第一次接触DEM数据时,被它的实用性震惊了——从洪水模拟到城市规划,再到手机导…...
5 款主流开源 SDD 框架深度体验与 PK
强大的 AI Coding 似乎无时无刻不在制造新的焦虑:程序员、IDE、甚至软件工程都不再被需要,“会说话就会开发软件”。这是极端且不负责任的。毕竟,还有更多需要逻辑严密的商业软件系统。 强如 OpenAI,在使用Codex开发内部系统时依…...
