C++二叉树的前序,中序,后序,层序遍历的递归算法55555
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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<
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<
PreOrder(root->lchild);//左
PreOrder(root->rchild);//右
}
}
void InOrder(BiTree root) //中序遍历
{
if(root!=NULL)
{
InOrder(root->lchild); //左
cout<
InOrder(root->rchild); //右
}
}
void PostOrder(BiTree root) //后序遍历
{
if(root!=NULL)
{
PostOrder(root->lchild);//左
PostOrder(root->rchild);//右
cout<
}
}
int shuru()
{cout<<"输入二叉树(,表示空)安#结束输入:\n";}
int main()
{
shuru();
BiTree ss;
int i=CreatBiTree(ss);