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

二叉树——层序遍历

目录

实现层序遍历

判断是否为完全二叉树


实现层序遍历

除了先序遍历,中序遍历,后序遍历外,还可以对二叉树进行层序遍历。设二叉树的结点所在层数为1,层序遍历就是从所在二叉树的根结点出发,首先访问第一层的树根结点,然后再从上至下,从左至右的依次访问,这就是层序遍历。

实现层序遍历需要借助数据结构——队列

队列里的结点是 指向二叉树结点的指针

 

上图两个做标记处,第二个我们可能还可以理解,第一个再加一个struct是否有点多余了呢?

其实不会,而且必须要加,因为:如果只写BTNode*,编译器是不认识的,因为我们的Queue.h中是没有包含Tree.h的,所以我们要加上struct来“声明”这是一个结构体指针。

看到这有人可能会问了,“哎,博主博主,那我加上一个头文件不就可以了吗?”

哈哈,答案当然是“不行❌”

为什么呢?请看下图:

 

void LevelOrder(BTNode* root)
{Queue q;QueueInit(&q);QueuePush(&q, root);while (!QueueEmpty(&q)){BTNode* top = QueueFront(&q);printf("%c", top->data);QueuePop(&q);if(top->left!=NULL)QueuePush(&q, top->left);if (top->right != NULL)QueuePush(&q, top->right);}QueueDestroy(&q);
}

判断是否为完全二叉树

首先我们来认识一下什么是完全二叉树,完全二叉树首先是二叉树,所有的结点度都不超过2,除了最后一层其他层都是满的,最后一层不一定,但结点一定是从左到右依次填充的。

那怎么判断一棵二叉树是不是完全二叉树呢?

依旧队列。如下图:

 

bool BinaryTreeComplete(BTNode* root)
{Queue q;QueueInit(&q);QueuePush(&q, root);while (!QueueEmpty(&q)){BTNode* top = QueueFront(&q);QueuePop(&q);if (top == NULL)break;QueuePush(&q, top->left);QueuePush(&q, top->right);}while (!QueueEmpty(&q)){BTNode* top = QueueFront(&q);QueuePop(&q);if (top){QueueDestroy(&q);return false;}}QueueDestroy(&q);return true;
}

相关文章:

  • OpenSHMEM 介绍和使用指南
  • 进程信号的学习
  • 使用termius连接腾讯云服务器
  • MySQL八股(自用)
  • 【JAVA常见数据类型】
  • Android学习总结之kotlin篇(二)
  • 前端3D动画库
  • [Java实战]Spring Boot 3整合JWT实现无状态身份认证(二十四)
  • 18前端项目----Vue项目收尾优化|重要知识
  • ubuntu studio 系统详解
  • Spring Boot拦截器详解:原理、实现与应用场景
  • 计算机过程控制干燥操作实训装置JG-SX210化工单元操作实训装置
  • JavaScript 中级进阶技巧之map函数
  • 【嵌入式笔记】Modbus TCP
  • git仓库初始化
  • zabbix7.2最新版本 nginx自定义监控(三) 设置触发器
  • Anki 学习法
  • 深入浅出 IPFS 在 DApps 和 NFT 中的应用:以 Pinata 实战为例
  • 印度尼西亚数据源对接技术指南
  • vue3基础学习(上) [简单标签] (vscode)
  • 秦洪看盘|缩量回踩,积蓄叩关能量
  • 最高法、证监会:常态化开展证券纠纷代表人诉讼,降低投资者维权成本
  • 中国证券业协会修订发布《证券纠纷调解规则》
  • 创同期历史新高!1至4月全国铁路发送旅客14.6亿人次
  • 从《让·桑特伊》到《追忆》,假故事的胜利
  • 外国游客“在华扫货”热:“带空箱子到中国!”