D
                                              / 
                                             /   
                                            B     E
                                           / \     
                                          /   \     
                                         A     C     G
                                                    /
                                                   /
                                                  F
DBACEGF ABCDEFG BCAD CBAD
ACBFGED CDAB
#include<cstdio>
#include<cstring>
#include<cstdlib>
struct node
{
	char value;
	node *leftchild;
	node *rightchild;
};
node *newnode(char c)
{
	node *p=(node *)malloc(sizeof(node));
	p->value=c;
	p->leftchild=p->rightchild=NULL;
	return p;
}
node *rebuild(char *pre,char *in,int len)
{
	if(len==0) return NULL;
   node *p=newnode(pre[0]);
   int i;
   for(i=0;i<len && in[i]!=pre[0];i++);
   int leftlen=i;
   int rightlen=len-i-1;
   if(leftlen>0) p->leftchild=rebuild(pre+1,in,leftlen);
   if(rightlen>0) p->rightchild=rebuild(pre+1+leftlen,in+leftlen+1,rightlen);
   return p;
}
void pos(node *p)
{
	if(p==NULL) return;	
	pos(p->leftchild);
	pos(p->rightchild);
	printf("%c",p->value);
}
int main()
{
	char preorder[30],inorder[30];
	while(scanf("%s%s",&preorder,&inorder)!=EOF)
	{
       int len=strlen(preorder);
	   node *newtree=rebuild(preorder,inorder,len);
	   pos(newtree);
       printf("\n");
	}
	return 0;
}原文:http://blog.csdn.net/zuguodexiaoguoabc/article/details/44002599