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

针对考研的C语言学习(二叉树专题层次遍历---广度优先遍历)

层次便利需要一个队列来辅助保存节点信息

代码

#include<stdio.h>
#include<stdlib.h>
typedef char ElemType;//树
typedef struct trees{ElemType data;struct trees*lc;struct trees*rc;
}treeNode,*Tree;//链表
typedef struct Links{Tree tree;struct Links*next;
}LNode,*LinkList;//队列
typedef struct{LinkList front;LinkList rear;
}LinkQue;void init_que(LinkQue&q)
{q.front=q.rear=(LinkList)calloc(1,sizeof(LNode));q.front=q.rear;
}bool isEmpty(LinkQue&q)
{return q.front == q.rear;
}//入队
void push_que(LinkQue&q,Tree tree)
{//新建链表节点LinkList newList = (LinkList)calloc(1,sizeof(LNode));newList->next=NULL;newList->tree=tree;q.rear->next=newList;q.rear=q.rear->next;
}
bool pop_que(LinkQue&q,Tree &tree)
{if(isEmpty(q)){return false;}LinkList del = q.front->next;//头结点不存数据,第一个节点才是真的数据起始位置q.front->next=del->next;//断链tree=del->tree;if(q.rear == del)//只剩下尾节点的数据{q.rear=q.front;//置空}free(del);return true;
}void build_tree(Tree&tree)
{LinkQue q;init_que(q);LinkList cur = NULL;ElemType data;while(scanf("%c",&data) && data != '\n'){Tree newTree = (Tree)calloc(1,sizeof(treeNode));//申请新的树的节点newTree->data=data;if(tree == NULL){tree = newTree;push_que(q,tree);//入队cur = q.rear;}else{if(cur->tree->lc == NULL){cur->tree->lc = newTree;push_que(q,newTree);}else{cur->tree->rc = newTree;push_que(q,newTree);//改变当前父亲节点cur = cur->next;}}}
}void pre_print(Tree t)
{if(t){putchar(t->data);pre_print(t->lc);pre_print(t->rc);}
}
void mid_print(Tree t)
{if(t){mid_print(t->lc);putchar(t->data);mid_print(t->rc);}
}
void post_print(Tree t)
{if(t){post_print(t->lc);post_print(t->rc);putchar(t->data);}
}void level_print(Tree t)
{Tree cur;LinkQue q;//队列建立init_que(q);push_que(q,t);//树根入队while(!isEmpty(q))//队列不为空{//出队pop_que(q,cur);putchar(cur->data);if(cur->lc){push_que(q,cur->lc);//左子树入队}if(cur->rc){push_que(q,cur->rc);//右子树入队}}
}
int main()
{Tree tree = NULL;build_tree(tree);// pre_print(tree);level_print(tree);return 0;
}

代码运行结果

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

相关文章:

  • spring揭秘31-spring任务调度01-spring集成Quartz及JDKTimer定时器
  • Kafka之资源容量评估
  • 深度学习神经网络的7大分类
  • 【DNF mysql8.0安装】DNF安装MySQL服务器教程
  • 决策树与随机森林在分类问题中的应用
  • Dmitri Shuralyov的全职开源之旅
  • 基于LSTM-Transformer混合模型实现股票价格多变量时序预测(PyTorch版)
  • 创建TaskPool任务组
  • 一文1800字从0到1浅谈web性能测试!
  • 计算机网络基础(1)
  • GNU/Linux - 宏处理工具M4
  • Oracle权限安全管理
  • C++笔记之静态多态和动态多态
  • Axure RP电商系统商城PC+app+后台买家卖端高保真原型模板及元件库
  • RTX3070的yolo训练模型迁移到NVIDIA JETSON XAVIER NX 上的踩坑经验,时机部署避雷点
  • 带你学习如何编写一篇API详设文档以及给新人提点建议
  • 【Python爬虫实战】正则:多字符匹配、开头与结尾定位、分组技术详解
  • DOIP协议介绍-1
  • 探索Python中的多线程与多进程
  • paypal php 实现详细攻略
  • 深入理解Dubbo原理鱼实现,提升职场竞争力
  • 自动化测试与敏捷开发的重要性
  • 气膜:冰雪产业的创新解决方案—轻空间
  • 期货配资网/分仓多元化/配资系统服务商
  • 「漏洞复现」百易云资产管理运营系统 ufile.api.php SQL注入漏洞
  • Vue 3 和 Vue Router 使用 createWebHistory 配置
  • Nginx:rewrite指令之flag标志
  • C#从零开始学习(如何构建应用)
  • FCoE简介
  • 论文笔记:Template-Based Named Entity Recognition Using BART