D / / B E / \ / \ A C G / / F
DBACEGF ABCDEFG BCAD CBAD
ACBFGED CDAB
#include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct node{ char data; struct node*lchild,*rchild; }NODE,*PNODE; PNODE rebuildTree(char *post,char*in,int len)//post表示先序遍历的结果,in表示中序遍历的结果,len表示当前子树的长度 { if(len<=0) return NULL; PNODE node=(PNODE)malloc(sizeof(NODE)); node->data=*post; char* k=strchr(in,node->data);//找到根节点所在的中序的位置 int leftlen=strlen(in)-strlen(k);//左子树长度 int rightlen=len-leftlen-1;//右子树长度 node->lchild=rebuildTree(post+1,in,leftlen);//递归建立左子树 node->rchild=rebuildTree(post+leftlen+1,in+leftlen+1,rightlen);//递归建立右子树 return node; } void print(PNODE root)//后序遍历输出结果 { if(root==NULL) return; print(root->lchild); print(root->rchild); printf("%c",root->data); } int main() { char post[27],in[27]; while(~scanf("%s%s",post,in)) { PNODE root=NULL; root=rebuildTree(post,in,strlen(in)); print(root); printf("\n"); } return 0; }
原文地址:http://blog.csdn.net/u013238646/article/details/43483489