PAT 1086. Tree Traversals Again (25)
来源:互联网 发布:靠谱韩代 淘宝店 良心 编辑:程序博客网 时间:2024/05/01 08:10
1086. Tree Traversals Again (25)
An inorder binary tree traversal can be implemented in a non-recursive way with a stack. For example, suppose that when a 6-node binary tree (with the keys numbered from 1 to 6) is traversed, the stack operations are: push(1); push(2); push(3); pop(); pop(); push(4); pop(); pop(); push(5); push(6); pop(); pop(). Then a unique binary tree (shown in Figure 1) can be generated from this sequence of operations. Your task is to give the postorder traversal sequence of this tree.
Figure 1
Input Specification:
Each input file contains one test case. For each case, the first line contains a positive integer N (<=30) which is the total number of nodes in a tree (and hence the nodes are numbered from 1 to N). Then 2N lines follow, each describes a stack operation in the format: "Push X" where X is the index of the node being pushed onto the stack; or "Pop" meaning to pop one node from the stack.
Output Specification:
For each test case, print the postorder traversal sequence of the corresponding tree in one line. A solution is guaranteed to exist. All the numbers must be separated by exactly one space, and there must be no extra space at the end of the line.
Sample Input:6Push 1Push 2Push 3PopPopPush 4PopPopPush 5Push 6PopPopSample Output:
3 4 2 6 5 1思路:根据根左右和左根右的顺序,构造树,再用左右根的顺序遍历#include <stdio.h>#include <string.h>#include <vector>using namespace std;int N, X, pre[50], in[50];char op[10];vector<int> list, post_order;struct Node{int val;Node *left, *right, *root;};Node * fun(int *pre_order, int *in_order, int length){if(length == 0){return NULL;}int val = pre_order[0], index = 0;for(int i = 0; i < length; i++){if(pre_order[0] == in_order[i]){index = i;break;}}Node *newNode = new Node();newNode->val = pre_order[0];newNode->left = fun(pre_order + 1, in_order, index);newNode->right = fun(pre_order + index + 1, in_order + index + 1, length - 1 - index);return newNode;}void post(Node *root){if(root == NULL){return;}post(root->left);post(root->right);post_order.push_back(root->val);}int main(){while(scanf("%d", &N) != EOF){Node *root;int index_pre = 0, index_in = 0;for(int i = 0; i < N * 2; i++){scanf("%s", &op);if(strcmp(op, "Push") == 0){scanf("%d", &X);pre[index_pre++] = X;list.push_back(X);}else{in[index_in++] = list.back();list.pop_back();}}root = fun(pre, in, index_pre);post(root);printf("%d", post_order[0]);for(int i = 1; i < index_pre; i++){printf(" %d", post_order[i]);}printf("\n");}return 0;}
- pat 1086. Tree Traversals Again (25)
- PAT 1086. Tree Traversals Again (25)
- PAT A 1086. Tree Traversals Again (25)
- 【PAT】1086. Tree Traversals Again (25)
- PAT 1086. Tree Traversals Again (25)
- 【PAT】1086. Tree Traversals Again (25)
- PAT(A) - 1086. Tree Traversals Again (25)
- PAT甲级.1086. Tree Traversals Again (25)
- 1086. Tree Traversals Again (25) PAT甲级
- PAT-A-1086. Tree Traversals Again (25)
- Pat(A) 1086. Tree Traversals Again (25)
- PAT 甲级 1086. Tree Traversals Again (25)
- PAT 1086. Tree Traversals Again
- PAT 1086. Tree Traversals Again
- 【PAT】1086. Tree Traversals Again
- PAT--1086. Tree Traversals Again
- Tree Traversals Again (PAT)
- 1086. Tree Traversals Again (25)-PAT甲级真题
- C语言实现大小写转换的三种方法
- zoj 3809 水 2014 ACM牡丹江区域赛网赛
- 原生态异步提交
- linux nohup命令详解
- vertical-align的小作用
- PAT 1086. Tree Traversals Again (25)
- SDL2.0在mfc窗口中显示yuv的一种方法
- Linux tail 命令详解
- Android系统集成第三方pre-build库和程序(转)
- 创建型模式总结
- 对于返回局部指针变量的思考
- iOS7新增特性
- MMU(TLB)与Cache的工作方式
- Redundant management nodes in MySQL Cluster