C:不要在for循环内定义变量,在函数开始处定义变量
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
#include#include #include typedef struct tree{ int data ; struct tree *l, *r ;}tree, *tr ;int flag ;tr creat(int *root, int*in, int k){ tr t ; int *p ,m; if(k<=0) return NULL ; t = (struct tree*)malloc(sizeof(struct tree)) ; t->data = *root ; for(p=in; p!=NULL; p++) if(*p==*root) break ; m = p - in ; t->l = creat(root+1, in, m) ; t->r = creat(root+m+1, p+1, k-m-1) ; return t ;}void postorder(tr t){ if(t!=NULL) { postorder(t->l) ; postorder(t->r) ; if(flag) printf(" ") ; flag = 1 ; printf("%d", t->data) ; }}int main(){ tr t ; int n,i ; int root[1001], in[1001] ; while(scanf("%d", &n)!=EOF) { flag = 0 ; for(i=0; i
C++:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
#includeusing namespace std;typedef struct tree{ int data; struct tree *r,*l;}tree,*tr;int flag;tr creat(int *a,int *b,int n){ tr s; int *p,k; if(n <= 0) return NULL; s = new tree; s->data = *a; for(p=b; p!=NULL; p++) { if(*p == *a) break; } k = p - b; s->l = creat(a + 1,b,k); s->r = creat(a + k + 1,p + 1,n - k - 1); return s;}void postorder(tr b){ if(b != NULL) { postorder(b->l); postorder(b->r); if(flag) cout<<" "; flag = 1; cout< data; }}int main(){ int a[1001],b[1001]; int n; while(cin>>n) { flag = 0; for(int i = 0;i < n;i ++) cin>>a[i]; for(int i = 0;i < n;i ++) cin>>b[i]; postorder(creat(a,b,n)); cout<
注意输入输出格式,已知先序和中序,求后序