PAT1086
2016-12-10 08:52
141 查看
1086. Tree Traversals Again (25)
时间限制200 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue
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:
6 Push 1 Push 2 Push 3 Pop Pop Push 4 Pop Pop Push 5 Push 6 Pop Pop
Sample Output:
3 4 2 6 5 1
提交代码
就是入栈的时候是前序遍历,出栈中序遍历, 那么用stack存一下放到两个数组里面,之后就是前序中序已知求出这棵树再后序遍历一下就好了。
#include #include #include #include #include using namespace std; struct Node{ struct Node * left; struct Node * right; int value; }; int pre[50]; int in[50]; int flag=1; void build(Node * &Root , int pbegin,int pend,int ibegin,int iend ){ if(pbegin>pend)return ; Root= new Node; Root->value = pre[pbegin]; //cout<value<left=NULL; Root->right=NULL; int k=0; while(pre[pbegin]!=in[k]){ k++; } build(Root->left,pbegin+1,pbegin+k-ibegin,ibegin,k-1); build(Root->right,pbegin+k-ibegin+1,pend,k+1,iend); } void travel(Node * Root){ if(Root==NULL)return ; travel(Root->left); travel(Root->right); if(flag){ flag=0; cout<value; } else { cout<<" "<value; } } int main(){ stacks; int n; cin>>n; int p_index=-1,i_index=-1; for(int i=1;i<=2*n;i++){ string name; cin>>name; if(name=="Push"){ int x; cin>>x; s.push(x); pre[++p_index]=x; // cout<<"pre:"<
left->value; travel(Root); }
相关文章推荐
- PAT程序设计考题——甲级1086( The best rank ) C++实现
- Pat(Advanced Level)Practice--1086(Tree Traversals Again)
- PAT Advanced 1086
- PAT—甲级-1086
- PAT (Advanced Level) Practise 1086 Tree Traversals Again (25)
- PAT 1086
- PAT 1086 Tree Traversal Again
- 浙大PAT1086
- 1086. Tree Traversals Again (25)【二叉树】——PAT (Advanced Level) Practise
- PAT 1086 Tree Traversals Again
- PAT甲级1119,1086,1020总结
- PAT 1086 Tree Traversals Again
- PAT(甲级)1086
- PAT 1086 Tree Traversals Again
- 解题报告-PAT- Tree Traversals Again(1086)
- PAT (Advanced Level) Practise 1086 Tree Traversals Again (25)
- 1086. Tree Traversals Again (25) PAT甲级刷题
- PAT 1020(由二叉树的中序和后序,求层序遍历) 1086(由二叉树的中序和先序求后序遍历)
- PAT 1086
- **浙大PAT甲级 1086 二叉树的先中根遍历求后根遍历