首页 > 代码库 > 毕业了-二叉树层次遍历算法-借助循环队列这个数据结构来实现,悟:数据结构是用来实现算法的
毕业了-二叉树层次遍历算法-借助循环队列这个数据结构来实现,悟:数据结构是用来实现算法的
//代码进过测试,直接可以拿来用
//关键就是那一点未透——队列。
// 关键就是一个出队,一个入队操作。
#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 =http://www.mamicode.com/ 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; }
毕业了-二叉树层次遍历算法-借助循环队列这个数据结构来实现,悟:数据结构是用来实现算法的
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。