题目描述:
根据前序+中序,找后序
解题思路:
根据前序+中序建树,然后后序输出。
注意:递归建树里的null情况。—— 每次递归建立一个节点,那么要看清楚在有子树时才递归调用。
代码:
#include
#include
#define N 30
typedef struct node{
char key;
struct node *left, *right;
}NODE;
char pre[N], in[N];
NODE* buildTree(int ps, int is, int len){
NODE* r = NULL;
int i;
r = (NODE*)malloc(sizeof(NODE));
r->key = pre[ps];
r->left = NULL;
r->right = NULL;
if(len>1){
for(i=is;i
if(in[i] == pre[ps])
break;
if(i-is >0)
r->left = buildTree(ps+1,is,i-is);
if(len-(i-is)-1>0)
r->right = buildTree(ps+1+i-is, i+1, len-(i-is)-1);
}
return r;
}
void postOrder(NODE* r){
if(r!=NULL){
postOrder(r->left);
postOrder(r->right);
printf("%c",r->key);
}
}
main(){
NODE* root;
while(scanf("%s%s",pre,in)!=EOF){
root = buildTree(0,0,strlen(pre));
postOrder(root);
printf("\n");
}
//system("pause");
return 0;
}