二叉树层序遍历及判断完全二叉树

简介: 二叉树层序遍历及判断完全二叉树

个人主页:Lei宝啊

愿所有美好如期而遇


目录

二叉树层序遍历:

判断完全二叉树:


二叉树层序遍历

层序遍历就是一层一层,从上到下遍历,上图遍历结果为:4 2 7 1 3 6 9


思路:

通过队列来实现层序遍历,让父节点带孩子节点。将父节点入队列,当其孩子节点不为空时,入队列,将父节点出队列,依次类推。

代码:

树的结构:

typedef struct BT_Tree
{
  char data;
  struct BT_Tree* left;
  struct BT_Tree* right;
}BT_Tree;

队列结构:


typedef struct BT_Tree* DataType;
typedef struct Queue
{
  DataType data;
  struct Queue *next;
}Queue;
typedef struct Q
{
  Queue* head;
  Queue* tail;
  int size;
}Q;


层序实现:


void Sequence(BT_Tree* node)
{
  if (node == NULL)
  {
    printf("NULL\n");
    return;
  }
  Q queue;
  Init(&queue);
  QueuePush(&queue, node);
  while (!Empty(&queue))
  {
    BT_Tree* front = GetQueueFrontNum(&queue);
    printf("%d ", front->data);
    if (front->left)
      QueuePush(&queue, front->left);
    if (front->right)
      QueuePush(&queue, front->right);
    QueuePop(&queue);
  }
}

图解:


判断完全二叉树:

思路:

这里同层序遍历的思路非常相似,但是不同的地方在于这里孩子节点为空我们仍要将其入队列,最后我们检查队列,若队列空后仍有非空的值,则不是完全二叉树

代码:

bool JudgeTreeComplete(BT_Tree* node)
{
  if (node == NULL)
    return true;
  Q queue;
  Init(&queue);
  QueuePush(&queue, node);
  while (!Empty(&queue))
  {
    BT_Tree* front = GetQueueFrontNum(&queue);
    if (front == NULL)
      break;
    QueuePush(&queue, front->left);
    QueuePush(&queue, front->right);
    QueuePop(&queue);
  }
  while (!Empty(&queue))
  {
    BT_Tree* front = GetQueueFrontNum(&queue);
    if (front != NULL)
    {
      Destroy(&queue);
      return false;
    }
    QueuePop(&queue);
  }
  Destroy(&queue);
  return true;
}

图解:


目录
相关文章
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
1160 10
|
SQL 缓存 Oracle
SQL调优之绑定变量用法简介
SQL调优之绑定变量用法简介
|
机器学习/深度学习 人工智能 自然语言处理
🔍 Prompt、RAG、Fine-tuning三者各自的优势是什么?
【10月更文挑战第15天】在人工智能模型的开发中,Prompt、RAG(检索增强生成)和Fine-tuning是三种常见的优化技术。Prompt通过少量示例引导模型生成特定输出,简单灵活;RAG结合检索和生成,适合需要大量外部知识的场景,提高答案准确性和可解释性;Fine-tuning通过特定任务或数据集训练模型,提升特定场景下的表现,适用于有大量数据和计算资源的场景。开发者需根据具体需求选择最合适的优化策略。
847 4
|
人工智能 算法 安全
基于YOLOV8的骑行智能守护实时检测系统【训练和系统源码+Pyside6+数据集+包运行】
基于YOLOv8的骑行智能守护实时检测系统,通过图像处理和AI技术,实时监测电动车及骑行者头盔佩戴情况,提升道路安全。该系统支持图片、视频和摄像头实时检测,具备GUI界面,便于操作和展示结果。使用5448张真实场景图片训练,包含电动车和骑行者是否佩戴头盔的三类标注。系统基于Python和Pyside6开发,具备模型权重导入、检测置信度调节等功能。
1147 0
基于YOLOV8的骑行智能守护实时检测系统【训练和系统源码+Pyside6+数据集+包运行】
若依修改,修改代理线上接口登录后台,若依框架如何使用线上的接口,如何在本地获取网页上的接口
若依修改,修改代理线上接口登录后台,若依框架如何使用线上的接口,如何在本地获取网页上的接口
Manacher(马拉车)算法详解
该文章详细解释了Manacher算法,这是一种高效找出给定字符串最长回文子串的算法,通过在字符串中插入特殊字符构建新的字符串,并利用中心扩展策略来找出最长回文序列,时间复杂度为O(N),空间复杂度为O(N)。
|
缓存 监控 负载均衡
nginx相关配置及高并发优化
Nginx的高并发优化是一个综合性的过程,需要根据具体的业务场景和硬件资源量身定制。以上配置只是基础,实际应用中还需根据服务器监控数据进行持续调整和优化。例如,利用工具如ab(Apache Benchmarks)进行压力测试,监控CPU、内存、网络和磁盘I/O等资源使用情况,确保配置的有效性和服务的稳定性。
574 0
|
设计模式 自然语言处理 Java
递归下降解析器的设计与实现
递归下降解析器的设计与实现
|
IDE 数据可视化 开发工具
Spyder
Spyder是一个用于数据科学和计算机视觉的Python集成开发环境(IDE)。它支持多个Python版本,并具有强大的交互式界面,可以帮助用户轻松地进行数据可视化、建模和分析。
804 1
|
安全 网络安全 网络虚拟化
企业路由器配置PPTP PC到站点模式VPN指南(外网访问内网资源)
企业路由器配置PPTP PC到站点模式VPN指南(外网访问内网资源)
798 0