根据先序和中序遍历 输出后序

输入先序和中序序列:
 

7
4 1 3 2 6 5 7
1 2 3 4 5 6 7

输出后序序列:
  


2 3 1 5 7 6 4

代码:

#include<iostream>
using namespace std;
struct node{
	char data;
	node* lchild;
	node* rchild;
};
int pre[55],in[55];
node* buildtree(int prel,int prer,int inl,int inr)
{
	if(inl>inr) return NULL;
	node* root=new node;
	root->data=pre[prel];
	int i;
	for(i=inl;i<=inr;i++)
	{
		if(in[i]==pre[prel])
		   break;
	}
	int num=i-inl;
	root->lchild=buildtree(prel+1,prel+num,inl,i-1);
	root->rchild=buildtree(prel+num+1,prer,i+1,inr);
}
int flag=0;
void print(node* root)
{
	if(root==NULL)
	  return;
	print(root->lchild);
	print(root->rchild);
	if(flag==0)
    {
    	printf("%d",root->data);
    	flag=1;
	}
	else
	{
		printf(" %d",root->data);
	}
}
int main()
{
	int n,i;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	   scanf("%d",&pre[i]);
	for(int i=1;i<=n;i++)
	   scanf("%d",&in[i]);
	node*root=buildtree(1,n,1,n);
	print(root);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/daoshen1314/article/details/88313908