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

数据结构--二叉树相关习题5(判断二叉树是否是完全二叉树 )

1.判断二叉树是否是完全二叉树 

辨别:

不能使用递归或者算节点个数和高度来判断。

满二叉树可以用高度和节点来判断,因为是完整的。

但是完全二叉树前面是满的,但是最后一层是从左到右连续这种

如果仍然用这种方法的话,如下图两个识别方法是一样的,但是无法准确识别

完全二叉树:前h-1层是满的,最后一层是从左到右连续。

如果走层序那么一定是连续的,也就是说要通过层序遍历来走。

思路:1.层序遍历走,空也进序列。

2.遇到第一个空时开始判断,如果后面都为空则是完全二叉树,若空后面还出席那非空的情况则说明不是完全二叉树。

代码实现:

//判断二叉树是否是完全二叉树
bool TreeComplete(BTNode* root)
{ Queue q;//仍然使用队列去实现QueueInit(&q);if (root)QueuePush(&q,root)while (!QueueEmpty){BTNode* front = QueueFront(&q);QueuePop(&q);//遇到第一个空就可以开始判断,如果队列中还有非空,就不是完全二叉树。if (front == NULL){break;}QueuePush(&q, front->left);QueuePush(&q, front->right);}while (!QueueEmpty){BTNode* front = QueueFront(&q);QueuePop(&q);//如果仍有非空元素,直接
//		return false;if (front){QueueDestroy(&q);//如果存在非空。return false;}QueueDestroy(&q);return true;
//最终QueueDestroy,再返回}
}

补充队列的一系列实现

void QueueInit(Queue* pq)
{assert(pq);pq->phead =  NULL;pq->ptail = NULL;pq->size = 0;
}void QueueDestroy(Queue* pq)
{assert(pq);QNode* cur = pq->phead;while (cur){QNode* next = cur->next;free(cur);cur = next;}pq->phead = pq->ptail = NULL;pq->size = 0;
}// 队尾插入
void QueuePush(Queue* pq, QDataType x)
{assert(pq);QNode* newnode = (QNode*)malloc(sizeof(QNode));if (newnode == NULL){perror("malloc fail");return;}newnode->next = NULL;newnode->val = x;if (pq->ptail == NULL){pq->phead = pq->ptail = newnode;}else{pq->ptail->next = newnode;pq->ptail = newnode;}pq->size++;
}// 队头删除
void QueuePop(Queue* pq)
{assert(pq);assert(pq->size != 0);/*QNode* next = pq->phead->next;free(pq->phead);pq->phead = next;if (pq->phead == NULL)pq->ptail = NULL;*/// 一个节点if (pq->phead->next == NULL){free(pq->phead);pq->phead = pq->ptail = NULL;}else // 多个节点{QNode* next = pq->phead->next;free(pq->phead);pq->phead = next;}pq->size--;
}QDataType QueueFront(Queue* pq)
{assert(pq);assert(pq->phead);return pq->phead->val;
}QDataType QueueBack(Queue* pq)
{assert(pq);assert(pq->ptail);return pq->ptail->val;
}int QueueSize(Queue* pq)
{assert(pq);return pq->size;
}
//判空
bool QueueEmpty(Queue* pq)
{assert(pq);return pq->size == 0;
}

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

相关文章:

  • Python 轻松生成多种条形码、二维码 (Code 128、EAN-13、QR code等)
  • Python: 分块读取文本文件
  • 服务攻防——中间件Jboss
  • 宏碁F5-572G-59K3笔记本笔记本电脑拆机清灰教程(详解)
  • 基于FPGA的LDPC编译码算法设计基础知识
  • 国际网课平台Udemy上的亚马逊云科技AWS免费高分课程和创建、维护EC2动手实践
  • 空中交通新动能!2024深圳eVTOL展动力电池展区核心内容抢先看!
  • 代码江湖:Python 中的进程与线程
  • 根据H在有限域GF(2^m)上求解生成矩阵G
  • Django 实现子模版继承父模板
  • 数据安全治理:从库级权限申请到表级权限申请
  • vue3源码(六)渲染原理-runtime-core
  • python拆分Excel数据,自动发邮箱
  • 2024年福州延安中学夏季拿云杯拔尖创新人才素养测试(小高组)
  • ES6 之 Promise 构造函数知识点总结 (四)
  • KIVY 3D Rotating Monkey Head¶
  • 测试几个 ocr 对日语的识别情况
  • 华为机考前准备工作
  • 偏差、方差(训练误差,验证误差)
  • Retrofit框架源码深度剖析【Android热门框架分析第二弹】
  • C++Windows环境搭建(CLion)
  • 【区块链 + 智慧政务】省级一体化区块链平台 | FISCO BCOS应用案例
  • 局域网远程共享桌面如何实现
  • Ubuntu固定虚拟机的ip地址
  • python破解密码·筛查和选择
  • 【将应用程序注册为系统服务】
  • 从0-1搭建一个web项目(路由目录分析)详解
  • Zabbix分布式监控
  • 前端面试39(关于git)
  • 13--memcache与redis