Pretree

#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);	
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值