題目描述:
根據前序+中序,找後序
解題思路:
根據前序+中序建樹,然後後序輸出。
注意:遞歸建樹裏的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;
}