您的位置:首页 > 理论基础 > 数据结构算法

数据结构 利用循环队列层次遍历一棵二叉树 递归实现

2016-04-25 10:34 951 查看
利用循环队列层次遍历一棵二叉树 递归实现

代码实现:

#include <iostream> ///循环队列实现层次遍历二叉树
#include <stdio.h>
#include <stdlib.h>

#define Maxsize 100
#define OK 1
#define OVERFLOW -2

using namespace std;

typedef char CElemType;

typedef struct BiNode
{
CElemType data;
struct BiNode*lchild,*rchild;
} BiNode,*BiTree;

typedef BiTree ElemType; ///存放二叉树地址的循环队列 吧

typedef struct
{
ElemType *base;
int front;
int rear;
} SeqQueue;

int InitQueue(SeqQueue &Q)
{
Q.base=(ElemType *)malloc(Maxsize*sizeof(ElemType));
if(!Q.base)
exit(OVERFLOW);
Q.front = Q.rear =0;
return OK;
}

int EnQueue(SeqQueue &Q,ElemType e)
{
if((Q.rear+1)%Maxsize==Q.front)
{
cout<<"Queue Full"<<endl;
return 0;
}
Q.rear = (Q.rear+1)%Maxsize;
Q.base[Q.rear]=e;
return 1;
}

int DeleQueue(SeqQueue &Q,ElemType &e)
{
if(Q.front==Q.rear)
{
cout<<"Queue Empty"<<endl;
return 0;
}
Q.front=(Q.front+1)%Maxsize;
e=Q.base[Q.front];
return 1;
}

int Empty(SeqQueue Q)
{
if(Q.rear==Q.front)
return 1;
else return 0;
}

void CreateBiTree2(BiTree &t)  ///引用实现创建一棵二叉树
{
char ch;
scanf("%c",&ch);
if(ch==' ')
t=NULL;
else
{
t=(BiTree)malloc(sizeof(BiNode));
t->data=ch;
CreateBiTree2(t->lchild);
CreateBiTree2(t->rchild);
}
}

void Cengci(BiTree t)
{
BiTree p=t;
SeqQueue Q;
int flag=InitQueue(Q);
EnQueue(Q,p);
while(!Empty(Q))
{
DeleQueue(Q,p);
cout<<p->data<<" ";
if(p->lchild)
EnQueue(Q,p->lchild);
if(p->rchild)
EnQueue(Q,p->rchild);
}
}

int main()
{
BiTree T;
cout<<"Please Input One BiTree :"<<endl;
CreateBiTree2(T);
cout<<"Cengci Order Output :"<<endl;
Cengci(T);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: