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

杭州 高端网站定制响应的网站

杭州 高端网站定制,响应的网站,上海专业做网站电话,外贸行业有哪些工作岗位目录 链式二叉树示意图​编辑 何为层序遍历 手搓一个链式二叉树 实现层序遍历链式二叉树 链式二叉树示意图 何为层序遍历 和前中后序遍历不同#xff0c;前中后序遍历链式二叉树需要利用递归才能遍历 而层序遍历是非递归的形式#xff0c;如上图#xff1a;层序遍历的…目录 链式二叉树示意图​编辑 何为层序遍历 手搓一个链式二叉树 实现层序遍历链式二叉树  链式二叉树示意图 何为层序遍历 和前中后序遍历不同前中后序遍历链式二叉树需要利用递归才能遍历 而层序遍历是非递归的形式如上图层序遍历的结果124356 手搓一个链式二叉树 代码演示以上图为例 // 数据类型 typedef int BTDataType;// 二叉树节点的结构 typedef struct BinaryTreeNode {BTDataType data; //每个节点的数据struct BinaryTreeNode* left; //指向左子树的指针struct BinaryTreeNode* right; //指向右子树的指针 }BTNode;// 申请新节点 BTNode* BuyNode(BTDataType x) {BTNode* newnode (BTNode*)malloc(sizeof(BTNode));// 判断是否申请成功if (newnode NULL){perror(malloc fail);return NULL;}// 初始化newnode-data x;newnode-left NULL;newnode-right NULL;return newnode; }BTNode* CreatBinaryTree() {BTNode* n1 BuyNode(1);assert(n1);BTNode* n2 BuyNode(2);assert(n2);BTNode* n3 BuyNode(3);assert(n3);BTNode* n4 BuyNode(4);assert(n4);BTNode* n5 BuyNode(5);assert(n5);BTNode* n6 BuyNode(6);assert(n6);n1-left n2;n1-right n4;n2-left n3;n4-left n5;n4-right n6;return n1; } 实现层序遍历链式二叉树 实现思路 利用队列的先进先出的性质实现层序遍历链式二叉树 如上图所示先将 1 节点入队列再将 1 节点出队列在 1 节点出队列的时候把 2、4 节点带入队列2 节点再出队列2 节点出队列的时候把 3 节点带入队列然后就是 4 节点出队列同样出队列的时候将 5、6 节点带入队列最后再依次出队列所有数据出完队列后根据出队列的顺序就是层序遍历的顺序 实现前要先构建一个简易队列以及队列的基本函数 // 数据类型 typedef BTNode* QDataType;// 链式队列每个节点的结构 typedef struct QueueNode {struct QueueNode* next; //指向下一个节点的指针QDataType data; //当前节点的数据 }QNode;// 链式队列的结构 typedef struct Queue {QNode* phead; //指向队头节点的指针QNode* ptail; //指向队尾节点的指针int size; //队列的总数据个数 }Queue;// 初始化队列 void QueueInit(Queue* pq) {assert(pq);pq-phead NULL;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-data x;newnode-next NULL;if (pq-phead NULL) //当队列中没有数据的情况{// 双重判断更加保险assert(pq-ptail NULL);// 头尾都指向新节点即可pq-phead newnode;pq-ptail newnode;}else //当队列已有数据的情况{pq-ptail-next newnode;pq-ptail newnode;}pq-size; }// 数据出队列 void QueuePop(Queue* pq) {assert(pq);// 当队列中没有数据的情况if (pq-phead NULL){perror(pq-phead);return;}if (pq-phead-next NULL) //当队列中只有一个数据的情况{free(pq-phead);pq-phead NULL;pq-ptail NULL;}else //当队列中有多个数据的情况{QNode* next pq-phead-next;free(pq-phead);pq-phead next;}pq-size--; }// 访问队头数据 QDataType QueueFront(Queue* pq) {assert(pq);// 当队列中没有数据的情况if (pq-phead NULL){perror(pq-phead);return -1;}return pq-phead-data; }// 判断队列是否为空 bool QueueEmpty(Queue* pq) {assert(pq);return (pq-phead NULL) (pq-ptail NULL); }// 释放队列 void QueueDestroy(Queue* pq) {assert(pq);QNode* cur pq-phead;while (cur ! NULL){QNode* next cur-next;free(cur);cur next;}pq-phead NULL;pq-ptail NULL;pq-size 0; } 在定义队列数据时需要定义链式二叉树节点的指针这样才能找到二叉树节点的左右子树 代码实现 void LevelOrder(BTNode* root) {// 定义队列Queue q;// 初始化队列QueueInit(q);// 先将二叉树的根节点的指针入队列if (root ! NULL)QueuePush(q, root);while (!QueueEmpty(q)){// 访问队头数据BTNode* front QueueFront(q);printf(%d , front-data);// 队头数据出队列QueuePop(q);if (front-left)QueuePush(q, front-left);if (front-right)QueuePush(q, front-right);}printf(\n); } 代码解析 当队列为空时链式二叉树的层序遍历就实现了 但最开始队列没有数据所以要先将指向根节点的指针存放入队列 且存放节点指针是为了方便查找左右子树 然后在利用 while 循环只要队列不为空就循环下去 先访问队头的数据队头的数据就是链式二叉树节点的指针 所以使用 BTNode* front 来接收再利用 printf 函数打印指针所指向节点中的数据 再把队头数据出队列并且把出队列那个节点的左右子树存放入队列 注意为空时就不要放入队列所以每次放入队列前要判断是否为空 直到队列为空时也就是不满足 while 循环时层序遍历就实现了 此代码的关键是利用 BTNode* front 接收每次要出队列的节点指针这样就方便查找当前节点的左右子树并且利用 BTNode* front 接收从而替代了递归逻辑 代码验证
http://www.hkea.cn/news/14411595/

相关文章:

  • 注册网站空间网站建设应解决的问题
  • 广告联盟建设个人网站镇江专业网站建设
  • phpcmsv9手机网站网络维护费计入什么科目
  • 提供做pc端网站网络推广方法有哪些
  • 九度互联网站制作效果企业网站小程序源码
  • 免费网站入口2021南宁网站建设怎样建立一个好网站
  • 去招聘网站做顾问做购物网站需要什么
  • 网站开发的进度安排建设旅游信息网站的好处
  • 精美网站设计欣赏网站建设淘宝详情页
  • 西部数码网站管理助手ftp济南建设集团有限公司
  • 中国保险行业协会网站河北5市最新消息
  • 温州建设局网站林南飞厦门网站建设格
  • asp.net 做网站文章是怎么存储的宿州城乡建设局网站
  • 专业的聊城做网站费用百度热度榜搜索趋势
  • 电子商务网站建设与完整实例网站网页设计引言
  • 企业网站托管外包怎么做长沙免费旅游景点大全
  • 什么叫手机网站厦门黄页
  • 公司网站怎么建立优化体系云主机网站源码
  • 建设银行网站转账科技服务网站建设内容
  • 快速学会做网站centos6安装wordpress
  • excel做网页放进网站网站需要多大数据库
  • asp网站作业下载网店首页设计
  • 建网站建立开源的低代码开发平台
  • 什么是网站风格策划的重点北京网站建设app开发
  • 网站仿制wordpress登录开发
  • 建设工程的在建设部网站国家企业信用公示信息查询平台
  • 网站备案流程及资料东莞长安做网站
  • 做网站要钱嘛网站二级域名怎么弄
  • 合肥哪家公司做网站专业建站策划
  • 用五百丁做名字的简历网站做网站什么商品好