您的位置:首页 > 其它

PAT1020 Tree Traversals

2015-11-01 23:41 218 查看
说实话,最近一段时间自己没怎么好好写PAT了,一直被这道题卡着,但是也没怎么好好去想,一直在考虑考研的事情,做了很多了解,。。。。。还是要好好准备才行。

这道题其实很简单,题目的意思就是根据二叉树的后序和中序来写出二叉树的层次遍历,自己都不知道当年数据结构在学什么东西,这么简单的题目都不会。。。

#include<stdio.h>
#include<queue>
#include<stdlib.h>
using namespace std;

typedef struct tree{
tree *l,*r;
int data;
}tree;

tree *root;
queue<int> q;
int n,last[2005],in[2005],count = 0;

tree *build(int *a,int *b,int c){
tree *t;
for(int i = 0;i<c;i++){
if(a[c-1] == b[i]){
t = (tree*)malloc(sizeof(tree));
t->data = b[i];
t->l = build(a,b,i);
t->r = build(a+i,b+i+1,c-i-1);

return t;
}
}
return NULL;
}

int atLevel(tree *a,int level){
if(!a || level <0)
return 0;
if(level == 0){
count++;
if(count == n)
printf("%d\n",a->data);
else printf("%d ",a->data);
return 1;
}
return atLevel(a->l,level-1)+atLevel(a->r,level-1);
}

void bianli(tree *a){
for(int i = 0; ;i++){
if(!atLevel(a,i))
break;
}
}

int main(){
while(scanf("%d",&n) != EOF){
for(int i = 0;i<n;i++)
scanf("%d",&last[i]);
for(int i = 0;i<n;i++)
scanf("%d",&in[i]);
root = build(last,in,n);
tree *a = root;
bianli(a);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: