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

二叉树按二叉链表形式存储,试编写一个判别给定二叉树是否是完全二叉树的算法

完全二叉树:就是每层横着划过去是连起来的,中间不会断开
比如下面的左图就是完全二叉树
再比如下面的右图就是非完全二叉树
在这里插入图片描述
那我们可以采用层序遍历的方法,借助一个辅助队列

当辅助队列不空的时候,出队头元素,入队头元素的左右孩子

这里不同于层序遍历的是,我们这里入左右孩子,如果左右孩子是NULL,我们也入队

当我们在重复执行上面的操作时,我们会有一刻出队列的时候遇到NULL的情况
这时,再对队列的剩余元素进行判断,如果全是NULL则是完全二叉树,否则是非完全二叉树

举例如下
在这里插入图片描述

先把根节点A入队
在这里插入图片描述

然后队列不空,队头A出队,A的左右孩子BC入队
在这里插入图片描述

然后队列不空,队头B出队,B的左孩子D 和NULL入队
在这里插入图片描述

然后队列不空,队头C出队,C的左右孩子E 和NULL入队
在这里插入图片描述

然后队列不空,队头D出队,D的左右孩子NULL入队
在这里插入图片描述
接下来,队不空,出队的元素是NULL
对于这种情况,我们就需要把队列剩余元素看一下了,如果队列剩余元素中有非NULL元素,
那么该树就不是完全二叉树
在这里插入图片描述

代码如下:

//队列相关操作
void InitQueue(SqQueue* Q);//初始化队列
void EnQueue(SqQueue* Q,BiTree T);//入队
void DeQueue(SqQueue* Q,BiTree* T)//出队头元素,用T带回出队元素
int QueueEmpty(SqQueue Q);//判断队列是否为空//判断是否是完全二叉树
int IsComplete(BiTree T){if(T==NULL){//空树是一种特殊的完全二叉树return 1;}SqQueue Q;//初始化一个辅助队列InitQueue(&Q);EnQueue(&Q,T);//根节点入队while(!QueueEmpty(Q)){//层序遍历BiTree p;DeQueue(&Q,&p);if(p!=NULL){//出的队头元素非空//左右孩子入队EnQueue(&Q,p->lchild);EnQueue(&Q,p->rchild);}else{//出的队头元素是NULL//判断队列中剩余元素是否全是NULL//全是NULL——完全二叉树//不全是NULL——非完全二叉树while(!QueueEmpty(Q)){DeQueue(&Q,&p);if(p!=NULL){return 0;}}}}return 1;
}
http://www.lryc.cn/news/220625.html

相关文章:

  • Android自定义控件
  • Java 中的 Cloneable 接口和深拷贝
  • 项目实战:通过axios加载水果库存系统的首页数据
  • RK3568平台 内存的基本概念
  • mysql联合索引和最左匹配问题。
  • 全球发布|首个AI视角下的生态系统架构解读—《生态系统架构--人工智能时代从业者的新思维》重磅亮相!
  • 解决torch.hub.load加载网络模型异常
  • 如何获取HuggingFace的Access Token;如何获取HuggingFace的API Key
  • How to resolve jre-openjdk and jre-openjdk-headless conflicts?
  • setTimeout和setImmediate以及process.nextTick的区别?
  • read 方法为什么返回 int 类型
  • 在二维矩阵/数组中查找元素 Leetcode74, Leetcode240
  • MS35657步进电机驱动器可兼容DRV8824
  • SQL语句性能优化
  • 线性代数之 伪逆矩阵
  • 【3D图像分割】基于Pytorch的VNet 3D 图像分割5(改写数据流篇)
  • 【漏洞复现】Apache_Shiro_1.2.4_反序列化漏洞(CVE-2016-4437)
  • Mac连接linux的办法(自带终端和iterm2)
  • js调整table表格上下相邻元素顺序
  • 基于ruoyi框架项目-部署到服务器上
  • Docker 持久化存储和数据共享_Volume
  • 万宾科技智能井盖监测仪器助力建设数字化城市
  • 第十一章《搞懂算法:聚类是怎么回事》笔记
  • 给定n个点或一个凸边形,求其最小外接矩形,可视化
  • 蓝桥杯每日一题2023.11.6
  • V-REP和Python的联合仿真
  • WPF布局控件之DockPanel布局
  • 【实战Flask API项目指南】之二 Flask基础知识
  • Linux 编译链接那些事儿(02)C++链接库std::__cxx11::basic_string和std::__1::basic_string链接问题总结
  • 按键精灵中的UI界面操作