队列实现按层次遍历二叉树
来源:互联网 发布:网络监控摄像头安装图解 编辑:程序博客网 时间:2024/05/22 04:25
就是按层次来 首先是根节点A入队列 然后是根节点的左B右C子树 根节点A出队列 左子B的左D右子树入队列然后B出队列 C的左右子树入对列C出队列 然后是D以此循环知道队列的头部和尾部重合队列空 输出完毕
思路并不难,但是在网上看的写的有点麻烦 照着一个ppt写了个简单一点的 可能不是最优的代码 但是很容易能理解这个思想和过程
#include<iostream>#include<malloc.h>#define LEN sizeof(BiTree)#define MAXQSIZE 100; //队列长度using namespace std;struct BiTree //二叉树{ char data; BiTree *lchild,*rchild;}*T;struct Qnode //链队列{ BiTree *Queue[100]; //M表示循环指针队列的长度 int nfront,nrear; //头和尾 用于处理数组所以int就可以}head;BiTree* CreatBiTree() //类似先序遍历创立,空位置补*{ BiTree *T; char ch;cin>>ch; if(ch=='*')T=NULL; else{ T=(BiTree *)malloc(LEN); T->data=ch; T->lchild=CreatBiTree(); T->rchild=CreatBiTree(); } return T;}void Levelorder(BiTree *T) { BiTree *p; // 建立一个 工作树指针p Qnode Q;Q.nrear=Q.nfront=0; //初始化这个队列 if (T!=NULL) { Q.Queue[Q.nrear]=T; //如果T不空 Q.nrear=(Q.nrear+1)%MAXQSIZE; //加入一个尾尾部 while (Q.nfront !=Q.nrear) //如果这个 队列不空 也就是二叉树不结束 { p=Q.Queue[Q.nfront]; //p等于队列头 cout<<p->data; //输出队列头部 Q.nfront=(Q.nfront+1)%MAXQSIZE; //front往后移动一个 if (p->lchild) //如果做左孩子不空 { Q.Queue[Q.nrear]=p->lchild; //那么尾部加上左孩子 Q.nrear=(Q.nrear+1)%MAXQSIZE; //rear往后移动一个 } if (p->rchild) //然后是右孩子 { Q.Queue[Q.nrear]=p->rchild; //同上 Q.nrear=(Q.nrear+1)%MAXQSIZE; } } }}int main() //运行 结束{ BiTree*test=CreatBiTree(); Levelorder(test);return 0;}
0 0
- 二叉树按层次遍历--队列实现
- 二叉树按层次遍历--队列实现
- 二叉树按层次遍历--队列实现
- 队列实现按层次遍历二叉树
- 二叉树层次遍历(借助队列实现)
- 二叉树利用队列实现层次遍历
- 使用队列实现二叉树按层次遍历(C++)
- 数据结构-----层次遍历二叉树算法(利用队列实现)
- 利用队列实现二叉树的层次遍历
- [二叉树专题]:广度优先:按层次遍历二叉树的非递归实现||使用队列实现层次遍历二叉树
- 采用队列数据结构按层次遍历二叉树
- 采用队列数据结构按层次遍历二叉树
- 二叉树层次遍历与链队列
- 二叉树的层次遍历 队列
- 按层次遍历二叉树
- 按层次遍历二叉树
- 按层次遍历二叉树
- 按层次遍历二叉树
- CSS3| 制作文字波浪线效果
- linux配置IP地址的方法
- Ubuntu14.04LTS firefox无法使用问题解决
- Flume-应用案例(二)
- CAEmitterLayer(粒子系统)学习笔记(含Demo)
- 队列实现按层次遍历二叉树
- grails中 grails generate-all错误解决方法
- (NodeJS学习文章收集一) NodeJS入门–环境搭建 IntelliJ IDEA
- NodeJs JsonWebToken
- 继续学习淘宝广告
- Fragment与Activity之间的传值和接口回调
- Appium Win环境搭建
- C语言中频繁的malloc和free导致的free()错误
- 什么BI软件