#include <iostream>
#include <string.h>
#include <malloc.h>
using namespace std;
#define NULL 0
#define MaxSize 100
#define MaxWidth 40
typedef struct node
{
char data;
struct node *lchild,*rchild;
}BiTree;
//定义二叉树的类型
void PostOrderTraverse(BiTree *root)
{
if(root!=NULL)
{
PostOrderTraverse(root->lchild);
PostOrderTraverse(root->rchild);
cout<<root->data;
}
}
void Inorder(BiTree *T)
{
int i;
static int N=0;
if(T!=NULL)//按右根左遍历二叉树
{
N++;
Inorder(T->rchild);
cout<<"\t_________________________\n\t";
for(i=1;i<=N;i++)
printf("| %c ",(i==N)?T->data:' ');
printf("|\n");
Inorder(T->lchild);
N--;
}
}
BiTree *restore(char *ppos,char *ipos,int n)
{
BiTree *ptr;
char *rpos;
int k;
if(n <=0)
return NULL;
ptr=(BiTree *)malloc(sizeof(BiTree));
ptr->data=*ppos;
ptr->lchild=NULL;
ptr->rchild=NULL;
for(rpos=ipos;rpos <ipos+n;rpos++)
if(*rpos==*ppos)
break;
k=rpos-ipos;
ptr->lchild=restore(ppos+1,ipos,k);
ptr->rchild=restore(ppos+1+k,rpos+1,n-1-k);
return ptr;
}
void main()
{
//先序序列:EBADCFHGIKJ 中序序列:ABCDEFGHIJK
BiTree *root;
char *pred=new char[20];
char *inod=new char[20];
cout << "请输入前序排列: ";
cin>> pred;
cout <<endl;
cout << "请输入中序排列: ";
cin>> inod;
cout <<endl;
root=restore(pred,inod,strlen(pred));
cout <<"后序排列为:";
PostOrderTraverse(root);
cout <<endl;
Inorder(root);
}
Pretree
最新推荐文章于 2024-10-16 19:50:44 发布