数据结构 — 6.顺序队列(循环)实现二叉树层次遍历
来源:互联网 发布:黑米软件官方 编辑:程序博客网 时间:2024/06/06 13:01
【问题描述】编写按层次顺序(同一层自左至右)遍历二叉树的算法
【输入形式】A B * C * * D * *
【输出形式】A B D C
/* 1.顺序循环队列 2.二叉树先序创建 3.二叉树层次遍历(队列实现)*/#include<stdio.h>#include<iostream>#include<malloc.h>#define MAX 50using namespace std;/* 二叉树结构 */typedef struct BTree{char data;struct BTree *lchild,*rchild;}BiTNode,*BiTree;/* 顺序队列 */typedef struct {BiTree qu[MAX];int front,rear;}Queue;/* 先序创建 二叉树 */void CreatBinaryTree(BiTree &T){ //输入的字符char ch;scanf("%c",&ch);//叶子结束符 ‘*’if(ch=='*') T = NULL;else{ //分配内存T=(BiTNode *)malloc(sizeof(BiTNode));//T = (BiTree)malloc(sizeof(BiTNode)); //数据域T->data = ch; //递归创建左右子树CreatBinaryTree(T->lchild);CreatBinaryTree(T->rchild);}}/* 队列初始化 */void InitQueue(Queue &q){//‘&’ 引用传递 ! q.front = 0; q.rear = 0;}/* 从尾部入队 */void EnterQueue(Queue &q,BiTree &p){ //取余 -> 队列是否排满if((q.rear+1)%MAX != q.front){ //队尾入队q.qu[q.rear] = p; //队尾下标后移q.rear = (q.rear+1)%MAX;}}/* 从队头出队 */void QuitQueue(Queue &q,BiTree &p){if(q.front != q.rear){ //将数据域中的数据取出来p = q.qu[q.front]; //队头下标后移q.front = (q.front + 1)%MAX;}}//注意!在处理队头队尾下标时不要忘了取余/* 二叉树层次遍历 */void FloorTraverse(BiTree &T){// 一个二叉树操作结点、 一个队列BiTree p;Queue q;//初始化p = T;InitQueue(q);if(p){ //将二叉树根节点入队 EnterQueue(q, p); //队列 为空是循环结束条件 -> 队列进队出队顺序就是层次遍历的顺序 while(q.front != q.rear){ //出队、 访问(visit)QuitQueue(q,p);cout<<p->data; //将此节点的左右子树分别从队尾入队if(p->lchild)EnterQueue(q,p->lchild);if(p->rchild)EnterQueue(q,p->rchild);}}}/* 主函数 */int main(){ BiTree T; CreatBinaryTree(T); FloorTraverse(T); return 0;}
0 0
- 数据结构 — 6.顺序队列(循环)实现二叉树层次遍历
- 数据结构--二叉树--层次遍历二叉树(顺序遍历)
- 数据结构 利用循环队列层次遍历一棵二叉树 递归实现
- 数据结构-----层次遍历二叉树算法(利用队列实现)
- 二叉树按层次遍历--队列实现
- 二叉树按层次遍历--队列实现
- 二叉树按层次遍历--队列实现
- 二叉树层次遍历(借助队列实现)
- 队列实现按层次遍历二叉树
- 二叉树利用队列实现层次遍历
- 数据结构--二叉树--层次遍历二叉树(链式遍历--队列)
- 使用队列实现二叉树按层次遍历(C++)
- 采用队列数据结构按层次遍历二叉树
- 采用队列数据结构按层次遍历二叉树
- 数据结构 — 5.二叉树层次遍历
- 数据结构—二叉树层次遍历
- 数据结构-层次遍历二叉树
- 利用队列实现二叉树的层次遍历
- 一网打尽当下NoSQL类型、适用场景及使用公司
- 一个类通过id关联另一个类,前后台处理
- spring security4 security="none"小讲
- vector<string>转换为char*[]
- <初级>安卓中事件点击的几种方式
- 数据结构 — 6.顺序队列(循环)实现二叉树层次遍历
- 因滚动条出现而导致页面晃动的解决方案
- Android中Touch事件分发过程全解析
- 由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题
- 重复ip(单词计数)不同语言实现对比
- OOD软件架构设计原则
- mysql通过sql文件创建数据库
- SMW0:上传EXCEL模板
- Objective-c学习笔记之集合