pat 1020. Tree Traversals (25)
2013-09-14 20:55
387 查看
改了 几次 终于ac了
注意post递归时的下标
利用后序和前序来建树 由于每个数字都不同,因此我选择用数组来代表该树
gettree(int lp,int rp,int li ,int ri)返回当前子树的父亲节点编号 lp,rp表示当前子树后序序列 li,ri 表示当前子树前序序列 注意我返回的父亲节点 下标为rp-1 所以 下标范围是序列再加一 这个地方很混 早知道开始直接返回 rp 这样就不会混淆
注意post递归时的下标
利用后序和前序来建树 由于每个数字都不同,因此我选择用数组来代表该树
gettree(int lp,int rp,int li ,int ri)返回当前子树的父亲节点编号 lp,rp表示当前子树后序序列 li,ri 表示当前子树前序序列 注意我返回的父亲节点 下标为rp-1 所以 下标范围是序列再加一 这个地方很混 早知道开始直接返回 rp 这样就不会混淆
#include<iostream> #include<stdio.h> #include<string.h> #include<queue> using namespace std; #define N 3005 struct node { int l,r; }a ; int post[35],in[35]; int gettree(int lp,int rp,int li,int ri) { // printf("%d %d %d %d\n",lp,rp,li,ri); if(lp>=rp)return -1; int i,x=post[rp-1]; // if(lp>rp)return 0; for(i=li;i<ri;i++) if(in[i]==x)break; a[x].l=gettree(lp,rp-ri+i,li,i); a[x].r=gettree(rp-ri+i,rp-1,i+1,ri); return x; } int main() { int n,i,root,x,ans; while(scanf("%d",&n)!=EOF) { for(i=0;i<n;i++)scanf("%d",&post[i]); for(i=0;i<n;i++)scanf("%d",&in[i]); root=gettree(0,n,0,n); queue<int>que; que.push(root); ans=0; while(que.size()) { x=que.front(); if(!ans) { printf("%d",x); ans=1; } else printf(" %d",x); if(a[x].l!=-1)que.push(a[x].l); if(a[x].r!=-1)que.push(a[x].r); que.pop(); } printf("\n"); } return 0; }
相关文章推荐
- 【PAT Advanced Level】1020. Tree Traversals (25)
- PAT甲级1020. Tree Traversals (25)
- PAT 1020. Tree Traversals (25)
- PAT甲级 1020. Tree Traversals (25)
- pat 1020. Tree Traversals (25)
- PAT_A 1020. Tree Traversals (25)
- [PAT]1020. Tree Traversals (25)
- PAT - 甲级 - 1020. Tree Traversals (25)(层次遍历)
- PAT 1020. Tree Traversals (25)
- PAT Advanced Level 1020. Tree Traversals (25)(Java 实现)
- PAT (Advanced Level) 1020. Tree Traversals (25)
- PAT (Advanced Level) 1020. Tree Traversals (25)
- PAT 1020. Tree Traversals (25)
- 1020. Tree Traversals (25)——PAT (Advanced Level) Practise
- PAT 甲级 1020. Tree Traversals (25)
- 浙大 PAT Advanced level 1020. Tree Traversals (25)
- PAT (Advanced Level) 1020. Tree Traversals (25) 给定后序中序,递归建树
- PAT甲级真题及训练集(19)--1020. Tree Traversals (25)(后序,中序建树,很重要)
- pat 1020. Tree Traversals (25)
- 1020. Tree Traversals (25)-PAT 题目1385:重建二叉树