1086. Tree Traversals Again (25)

来源:互联网 发布:php tp框架邮箱验证码 编辑:程序博客网 时间:2024/05/29 12:00

#include<iostream> #include <sstream>   //将string转化成int #include<string>     //定义string类型字符串 #include<stack>  #define MAXSIZE 100using namespace std;  typedef int ElemType;struct BTNode{ElemType data;BTNode * lchild;BTNode * rchild;};//先序+中序=建树   BTNode *  PreInCreate(ElemType pre[],ElemType in[],int len){      if(pre==NULL || in==NULL || len<=0) return NULL;      int i=0;      BTNode * T=new BTNode;      T->lchild=T->rchild=NULL;      int leftlen,rightlen;      ElemType tmp=pre[0];            T->data=tmp;            while(i<len){          if(in[i]!=tmp) i++;          else   break;             }            leftlen=i;rightlen=len-i-1;      if(leftlen>0) T->lchild=PreInCreate(pre+1,in,leftlen);      if(rightlen>0) T->rchild=PreInCreate(pre+leftlen+1,in+leftlen+1,rightlen);      return T;  }  //后序遍历    void PostOrder(BTNode * T,bool flag){    //flag=true表示可以输出空格     //这步判断一定要有,处理建树时的return NULL         if(T){            PostOrder(T->lchild,true);            PostOrder(T->rchild,true);            cout<<T->data;   if(!flag) flag=true;else   cout<<" ";       }     }    int  main(){  //freopen("input.txt","r",stdin);int n;    stringstream ss;  string Nstr;      getline(cin,Nstr);      ss << Nstr; ss >> n; ss.clear();  //cout<<n;          stack<int> myStack;int pre[MAXSIZE],in[MAXSIZE];string key; int data;int preidx=0,inidx=0;for(int i=0;i<2*n;i++){getline(cin,key);//cout<<key[1]<<"hahaha";return 0;if(key[1]=='u'){ //"u"表示字符串,'u'表示一个字符 string datastr=key.substr(5);ss<<datastr; ss>>data; ss.clear();pre[preidx++]=data;myStack.push(data); }else{int tmp=myStack.top();in[inidx++]=tmp;myStack.pop();}}BTNode * T;T=PreInCreate(pre,in,preidx); //因为最后一步多+1 PostOrder(T,false); return 0;  }  


0 0
原创粉丝点击