大致思路和通过中序和先序确定树的结构相同。
代码如下:
#include <stdio.h> #include <stdlib.h> //建立节点 struct BTNode { char date; BTNode* Leftchild; BTNode* Rightchild; }; BTNode *in_and_post_CreateTree(char *in,char *post,int n)//a是中序,b是后续 { BTNode *S;//用于返回的S节点 char *p;//循环只用,为了找出in的与*post(n-1)相同的节点指针 int k;//用于确定递归中要求的节点个数 if (n<=0) return NULL; S=(BTNode*)malloc(sizeof(BTNode)); S->date=*(post+n-1); for (p=in;p<in+n;p++) { if (*p==*(post+n-1)) break; } k=p-in; S->Leftchild=in_and_post_CreateTree(in,post,k); S->Rightchild=in_and_post_CreateTree(in+k+1,post+k,n-k-1); return S; } //用于检验结果之用 void PREOrder(BTNode* T) { if (T!=NULL) { printf("%c\n",T->date); PREOrder(T->Leftchild); PREOrder(T->Rightchild); } } int main() { char Stra[30]="DGBAECF"; char Strb[30]="GDBEFCA"; BTNode *Root; Root=in_and_post_CreateTree(Stra,Strb,7); PREOrder(Root); }