1086. Tree Traversals Again (25)
程序员文章站
2022-07-08 16:43:21
...
#include<iostream>
#include <sstream> //将string转化成int
#include<string> //定义string类型字符串
#include<stack>
#define MAXSIZE 100
using 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;
}
上一篇: JS中数据类型的判断( typeof,instanceof,constructor,Object.prototype.toString.call() )
下一篇: 【javaScript】Object.prototype.toString.call() 、 instanceof 以及 Array.isArray() 区别与优化层面的比较
推荐阅读
-
1086 Tree Traversals Again (25 分)(二叉树的遍历)
-
pat 1086 Tree Traversals Again
-
PATA 1086 Tree Traversals Again
-
浙大数据结构习题笔记:03-树3 Tree Traversals Again (25分)
-
【MOOC】03-树3 Tree Traversals Again (25分)
-
C语言 03-树3 Tree Traversals Again
-
【PAT】A1086 Tree Traversals Again (25分)
-
1086 Tree Traversals Again
-
PAT甲级1086 Tree Traversals Again (25分)|C++实现
-
1086. Tree Traversals Again (25)