首页 > 编程语言 > 详细

毕业了-二叉树层次遍历算法-借助循环队列这个数据结构来实现,悟:数据结构是用来实现算法的

时间:2017-06-23 20:22:06      阅读:291      评论:0      收藏:0      [点我收藏+]
//代码进过测试,直接可以拿来用
//关键就是那一点未透——队列。
// 关键就是一个出队,一个入队操作。
#include<iostream> #include<stdio.h> #include<stack> #include<queue> #include<malloc.h> # define MaxSize 100 using namespace std; //二叉树结点 typedef struct BTNode{ char data; struct BTNode *lchild; struct BTNode *rchild; }BTNode; //先序建立二叉树,大话p187,教科书吧版 BTNode *CreateBiTree()//只需要一个函数 { char ch; BTNode *T; scanf("%c",&ch); if(ch==#) T=NULL; else { T = (BTNode *)malloc(sizeof(BTNode)); T->data = ch; T->lchild = CreateBiTree(); T->rchild = CreateBiTree(); } return T;//返回根节点 } //底层借助了qu[MaxSize]这个循环数组实现了算法 void LevelOrder(BTNode *T) { BTNode *p; //定义工作指针p BTNode *qu[MaxSize]; //定义环形队列,存放节点指针 int front,rear; //定义队头和队尾指针 front=rear=-1; //置队列为空队列 rear++; qu[rear]=T; //根节点指针进入队列 while (front!=rear) //队列不为空 { front=(front+1)%MaxSize; p=qu[front]; //队头出队列 printf("%c ",p->data); //访问节点 if (p->lchild!=NULL) //有左孩子时将其进队 { rear=(rear+1)%MaxSize; qu[rear]=p->lchild; } if (p->rchild!=NULL) //有右孩子时将其进队 { rear=(rear+1)%MaxSize; qu[rear]=p->rchild; } } } int main() { BTNode *T; T = CreateBiTree();//建立 LevelOrder(T); return 0; }

 

毕业了-二叉树层次遍历算法-借助循环队列这个数据结构来实现,悟:数据结构是用来实现算法的

原文:http://www.cnblogs.com/cs-lcy/p/7071460.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!