已知前序,中序的遍歷的 求后序
node *PRint_postOrder(int len,char *a,char *b){ int i; char x = a[0]; if(len<=0)//遞歸的結束條件 return NULL; node *root; root = (node *)malloc(sizeof(struct node)); root->data = x;//一定別忘了把根的數據賦值過去,要不然根什么都毛了 for(i=0; i<len; i++){ if(b[i]==x)//尋找在中序里根的位置下標 break; root->l = print_postOrder(i,a+1,b);//左子樹的長度,左子樹在先序中開始的地方,左子樹在中序中開始的地方 root->r = print_postOrder(len-i-1,a+i+1,b+i+1);//右子樹的長度,右子樹在先序中開始的地方,右子樹在中序中開始的地方printf("%c",root->data);}老樣子,一開始我還以為懂了,沒想到到應用的時候老錯,看來還是沒吃透,要趕快找人幫忙啊
已知后序,中序的遍歷的 求前序
void *print_postOrder(int len,char *in,char *post){ if(len<=0) return NULL; int i; char x = post[len-1]; node *root; root = (node *)malloc(sizeof(struct node)); root->data = x; for(i=0; i<len; i++){ if(in[i]==x) break; } printf("%c",root->data); root->l = print_postOrder(i,in,post); root->r = print_postOrder(len-i-1,in+i+1,post+i);}這問題無非就求兩種情況,他奶奶的,要不干脆背模板算了 反正求前序就是
root->l = print_postOrder(i,in,post); root->r = print_postOrder(len-i-1,in+i+1,post+i);后序就是
root->l = print_postOrder(i,a+1,b); //左子樹的長度,左子樹在先序中開始的地方,左子樹在中序中開始的地方 root->r = print_postOrder(len-i-1,a+i+1,b+i+1); //右子樹的長度,右子樹在先序中開始的地方,右子樹在中序中開始的地方新聞熱點
疑難解答