当前位置: 首页 > news >正文

判断是否为完全二叉树

目录

  • 分析

分析

1.完全二叉树的概念:对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树。
在这里插入图片描述

2.思路:可以采用层序遍历的方法,把节点依次放入队列中,空节点也要放进去,在出队列的时候,出到空了,就开始遍历整个队列,如果整个队列都是空节点,则是完全二叉树,遇到非空节点,就不是完全二叉树。
在这里插入图片描述注意:那会不会出现有些非空节点还没有进队列,就已经开始判断是否有非空节点?
当然,这种情况是不会存在的。
后面非空节点一定是前面非空节点的孩子,前面非空节点已经出了队列,那么后面的非空节点肯定也已经入了队列
在这里插入图片描述

3.代码

bool TreeComplete(BTNode* root)
{Queue q;//创建队列QueueInit(&q);//队列的初始化QueuePush(&q, root);//将根节点进到队列中while (!QueueEmpty(&q)){BTNode* front = QueueFront(&q);//取出队头的数据,判断对头是否为空,为空的话,我们就可以不用出队列了,直接访问剩下的队列的数据if (front == NULL){break;}QueuePop(&q);//出对头数据QueuePush(&q, front->left);//进左孩子QueuePush(&q, front->right);//进右孩子}//继续判断接下来的队列数据是否有非空的节点,有的话,就不是完全二叉树。while (!QueueEmpty(&q)){BTNode* front = QueueFront(&q);{if (front){QueueDestroy(&q);return false;}}QueuePop(&q);}QueueDestroy(&q);return true;
}

这里我没有写队列的数据结构,我是写好了,直接拿来用的。
在这里插入图片描述

http://www.lryc.cn/news/394077.html

相关文章:

  • 【笔记】记一次redis将从节点变成主节点 主节点变成从节点
  • 解析Java中1000个常用类:DoubleSummaryStatistics类,你学会了吗?
  • WAIC热点聚焦|新质生产力与低空经济
  • Docker部署ETCD 3.5.14(保姆级图文教程)
  • 2024年7月6日 (周六) 叶子游戏新闻
  • python爬虫入门(二)之Requests库
  • Git 操作补充:cherry-pick、变基
  • 在 PostgreSQL 中,如何处理大规模的文本数据以提高查询性能?
  • 秋招提前批面试经验分享(下)
  • 零基础STM32单片机编程入门(七)定时器PWM波输出实战含源码视频
  • 【ubuntu自启shell脚本】——在ubuntu中如何使用系统自带的启动应用程序设置开机自启自己的本地shell脚本
  • nodejs配置国内镜像
  • 【JavaEE】多线程进阶
  • 大模型LLM面试常见算法题-包括Attention和Transformer常见面试题
  • 90元搭建渗透/攻防利器盒子!【硬件篇】
  • 用vue2+elementUI封装手机端选择器picker组件,支持单选、多选、远程搜索多选
  • 『古籍自有答案』古风H5案例赏析
  • Laravel模型事件完全指南:触发应用程序的动态行为
  • hot100 |八、二叉树
  • Matlab协方差矩阵分解法生成随机场
  • android 在清单文件中配置receiver,系统是何时会注册此广播接收者的?
  • 嵌入式硬件电路常用设计软件
  • c#的List<T>的SelectMany 和Select
  • 69.WEB渗透测试-信息收集- WAF、框架组件识别(9)
  • ASCII码对照表(Matplotlib颜色对照表)
  • Mysql-常用函数及其用法总结
  • 【c++刷题笔记-数组】day29:452. 用最少数量的箭引爆气球、 435. 无重叠区间 、 763.划分字母区间
  • 【数据结构】链表带环问题分析及顺序表链表对比分析
  • 快速解决找不到krpt.dll,无法继续执行代码问题
  • C# List、LinkedList、Dictionary性能对比