二叉樹模版變形
#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<queue>
using namespace std;
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
int z=0; //***
int CreateBiTree(BiTree &T,char *m)
{
char data;
data=*(m+z);
z++; //***
if(data=='#')
T=NULL;
else
{
T=(BiTree)malloc(sizeof(BiTNode));
T->data=data;
CreateBiTree(T->lchild,m); //*
CreateBiTree(T->rchild,m);
}
return 0;
}
void Visit(BiTree T)
{
if(T->data!='#')
printf("%c",T->data);
}
void InOrder(BiTree T)
{
if(T!=NULL)
{
InOrder(T->lchild);
Visit(T);
InOrder(T->rchild);
}
}
void PostOrder(BiTree T)
{
if(T!=NULL)
{
PostOrder(T->lchild);
PostOrder(T->rchild);
Visit(T);
}
}
void LevelOrder(BiTree T)
{
BiTree p=T;
queue<BiTree> que;
que.push(p);
while(que.empty()!=1)
{
p=que.front();
printf("%c",p->data);
que.pop();
if(p->lchild!=NULL)
que.push(p->lchild);
if(p->rchild!=NULL)
que.push(p->rchild);
}
}
int main()
{
BiTree T;
char s[2050];
int i,len;
while(gets(s)!=NULL)
{
len=strlen(s);
for(i=0;i<=len-1;i++)
if(s[i]!='#')
break;
if(i==len){
printf("\n");
continue;
}
CreateBiTree(T,s);
InOrder(T);
printf("%c",32);
PostOrder(T);
printf("%c",32);
LevelOrder(T);
printf("\n");
z=0; //***
}
return 0;
}