CSTFS1059Reconstructing the Tree

    技术2022-05-20  36

    Problem Address:http://cstfs.gdufs.edu.cn:8080/JudgeOnline/problem.jsp?id=1059

     

    学校OJ上的一道题。

     

    是对二叉树的重构。

     

    题意是给出树的先序和中序遍历序列,要求树的后序遍历序列。

     

    于是尝试建了一棵树。

     

    在先序中按顺序读,然后把中序分为左右两边,递推式地处理下去。树建成之后按后序访问并输出同时释放节点空间。

     

     

     

    代码如下:

     

    #include <iostream>using namespace std;char pre[30],in[30];struct node{ char c; node *left; node *right;};node *search(int s, int e, int &index){ int j;  node *n; if (s==e) {  n = (node*)malloc(sizeof(node));  n->c = in[s];  n->left = NULL;  n->right = NULL;  return n; } else if (s<e) {  n = (node*)malloc(sizeof(node));  for (j=s; in[j]!=pre[index] && j<=e; j++);  n->c = in[j];  if (s<=j-1)  {   index++;   n->left = search(s,j-1,index);  }  else  {   n->left = NULL;  }  if (j+1<=e)  {   index++;   n->right = search(j+1,e,index);  }  else  {   n->right = NULL;  }  return n; } return NULL;}void show(node *a){ if (a==NULL) return; show(a->left); show(a->right); printf("%c", a->c); free(a);}int main(){ node *root; int i,index; while(scanf("%s", pre)!=EOF) {  scanf("%s", in);  for (i=0; pre[i]!='/0'; i++);  index = 0;  root = search(0, i-1, index);  show(root);  printf("/n"); } return 0;}

     

    p.s.学校的OJ开了,马上上去水完几道题。还好确实比以前有进步。嗯嗯嗯!加油!

     


    最新回复(0)