根据前序和中序序列建造一个二叉树并且输出后序序列
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
struct tree
{
    char key;
    tree * left, * right;
};
char in[500],pre[500];
int len;
tree * plantree(char * in,char * pre,int leng) //in 表示当前中序的字符,pre表示当前前序的字符
{
   if(leng==0)
   return NULL;
   tree * node=new tree;
   node->key=*pre;
   int mark=0;  //记录中序的位置
   for(;mark<leng;mark++)
   {
       if(in[mark]==*pre)  //因为in本身传送过来是指针,所以in[0]不一定是中序第一个字母。
       break;
   }
   /*in表示还是那个未递归完的根节点*/
   node->left=plantree(in,pre+1,mark);  //第三个参数(mark)表示当前pre+1节点下面有多少个节点
   node->right=plantree(in+mark+1,pre+mark+1,leng-mark-1);//同上
   printf("%c",node->key);
}
int main()
{
    freopen("abc.txt", "r", stdin);
    while(cin>>pre>>in)
    {
        len=strlen(in);
        plantree(in,pre,len);
        printf("\n");
    }
}
                    
                
                
            
        
浙公网安备 33010602011771号