/*PAT 甲级1086*/
#include <iostream>
#include <cstring>
#include <vector>
#include <stack>
using namespace std;
vector<int> pre, in, post;
/*
1 确定根,确定左子树,确定右子树。
2 在左子树中递归。
3 在右子树中递归。
4 打印当前根。
*/
void postorder(int root, int start, int end) {
if(start > end) return ;
int i = start;
while(i < end && in[i] != pre[root]) i++;
postorder(root + 1, start, i - 1);
postorder(root + 1 + i - start, i + 1, end);
post.push_back(pre[root]);
}
int main() {
int n;
stack<int> s;
char str[5];
scanf("%d", &n);
for(int i = 0; i < n*2; i++){
scanf("%s", str);
if(strlen(str) == 4){
int n;
scanf("%d", &n);
s.push(n);
pre.push_back(n);
}
else{
in.push_back(s.top());
s.pop();
}
}
postorder(0, 0, n - 1);
printf("%d", post[0]);
for(int i = 1; i < n; i++)
printf(" %d", post[i]);
return 0;
}
PAT 甲级1086 Tree Traversals Again (25) 前序中序求后序树的遍历
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 题意:给出二叉树的前序遍历和中序遍历,求后序遍历。 NO.1:无需重建二叉树,可直接求出后序遍历结果。 NO.2 ...
- 建立一颗二叉排序树,并输出它的前序、中序、后序以及层次遍历结果 输入:56 9 1 5 8输出:6 1 5 9 8...