/*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) 前序中序求后序树的遍历
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 题意:给出二叉树的前序遍历和中序遍历,求后序遍历。 NO.1:无需重建二叉树,可直接求出后序遍历结果。 NO.2 ...
- 建立一颗二叉排序树,并输出它的前序、中序、后序以及层次遍历结果 输入:56 9 1 5 8输出:6 1 5 9 8...