C++二叉树的前序,中序,后序,层序遍历的递归算法55555

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

using namespace std;

#define queuesize 100

#define ERROR 0

#define OK 1

typedef struct BiTNode//二叉树

{

char data;

struct BiTNode *lchild,*rchild;

}BinNode;

typedef BinNode * BiTree;//定义二叉链表指针类型

typedef struct

{

int front,rear;

BiTree data[queuesize];//循环队列元素类型为二叉链表结点指针

int count;

}cirqueue;//循环队列结构定义

void leverorder(BiTree t)

{

cirqueue *q;

BiTree p;

q=new cirqueue;//申请循环队列空间

q->rear=q->front=q->count=0;//将循环队列初始化为空

q->data[q->rear]=t;q->count++;q->rear=(q->rear+1)%queuesize;//将根结点入队

while (q->count) //若队列不为空,做以下操作

if (q->data[q->front]) //当队首元素不为空指针,做以下操作

{

p=q->data[q->front]; //取队首元素*p

cout<data;

q->front=(q->front+1)%queuesize;q->count--;//队首元素出队

if (q->count==queuesize)//若队列为队满,则打印队满信息,退出程序的执行cout<<"error,队列满了!";

else

{//若队列不满,将*p结点的左孩子指针入队

q->count++;q->data[q->rear]=p->lchild;

q->rear=(q->rear+1)%queuesize;

}

if (q->count==queuesize)//若队列为队满,则打印队满信息,退出程序的执行cout<<"error";

else

{//若队列不满,将*p结点的右孩子指针入队

q->count++;q->data[q->rear]=p->rchild;

q->rear=(q->rear+1)%queuesize;

}

}

else

{q->front=(q->front+1)%queuesize;q->count--;}//当队首元素为空指针,将空指针出队}

int CreatBiTree(BiTree& root)

{

char ch;

BiTree p;

BiTree q[100];

int front=1,rear=0;

int jj=0;

ch=getchar();

while(ch!='#')

{

p=NULL;

if(ch!=',')

{

p=(BiTNode*)malloc(sizeof(BiTNode));

if(NULL==p)

return ERROR;

jj++;

p->data=ch;

p->lchild=p->rchild=NULL;

}

rear++;

q[rear]=p;

if(1==rear)

root=p;

else

{

if(p&&q[front])

{

if(0==(rear%2))

q[front]->lchild=p;

else

q[front]->rchild=p;

}

if(p&&(NULL==q[front]))

{

free(p);

return ERROR;

}

if(1==rear%2)

front++;

}

ch=getchar();

}

return OK;

}

void PreOrder(BiTree root) //先序遍历

{

if(root!=NULL)

{

cout<data; //根

PreOrder(root->lchild);//左

PreOrder(root->rchild);//右

}

}

void InOrder(BiTree root) //中序遍历

{

if(root!=NULL)

{

InOrder(root->lchild); //左

cout<data; //根

InOrder(root->rchild); //右

}

}

void PostOrder(BiTree root) //后序遍历

{

if(root!=NULL)

{

PostOrder(root->lchild);//左

PostOrder(root->rchild);//右

cout<data; //根

}

}

int shuru()

{cout<<"输入二叉树(,表示空)安#结束输入:\n";}

int main()

{

shuru();

BiTree ss;

int i=CreatBiTree(ss);

相关文档
最新文档