1086. Tree Traversals Again (25)
来源:互联网 发布:方维app.js 编辑:程序博客网 时间:2024/06/04 17:58
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<iostream>#include<string>#include<vector>#include<stack>using namespace std;struct node{int data;node *ls,*rs;};node *createtree(int n,int *p, int *q){if (n<=0) return NULL;node *root= new node;int k=0;while (p[0]!=q[k]) k++;root->data=p[0];root->ls=createtree(k,p+1,q);root->rs=createtree(n-k-1,p+1+k,q+1+k);return root;}int flag=0;void postorder (node *root){if (root->ls!=NULL) postorder (root->ls);if (root->rs!=NULL) postorder (root->rs);if (flag==0){cout<<root->data;flag=1;}else cout<<" "<<root->data;return;}int main (){vector<int> preo;vector<int> ino;stack<int> st;int n,i;cin>>n;while (preo.size()!=n||ino.size()!=n){string tmp;cin>>tmp;if (tmp=="Push"){int tmp2;cin>>tmp2;preo.push_back(tmp2);st.push(tmp2);}else {int tmp3=st.top();ino.push_back(tmp3);st.pop();}}int *preorder=new int [n];int *inorder=new int [n];for (i=0;i<n;i++){preorder[i]=preo[i];inorder[i]=ino[i];}node *root=new node;root=createtree (n,preorder,inorder);postorder (root);return 0;}
- 1086. Tree Traversals Again (25)
- 1086. Tree Traversals Again (25)
- 1086. Tree Traversals Again (25)
- 1086. Tree Traversals Again (25)
- 1086. Tree Traversals Again (25)
- 1086. Tree Traversals Again (25)
- 1086. Tree Traversals Again (25)
- 1086. Tree Traversals Again (25)
- 1086. Tree Traversals Again (25)
- 1086. Tree Traversals Again (25)
- 1086. Tree Traversals Again (25)
- 1086. Tree Traversals Again (25)
- 1086. Tree Traversals Again (25)
- 1086. Tree Traversals Again (25)
- 1086. Tree Traversals Again (25)
- 1086. Tree Traversals Again (25)
- 1086. Tree Traversals Again (25)
- 1086. Tree Traversals Again (25)
- Java类获取spring 容器的bean
- 向量旋转算法集锦(转载)
- strlen和sizeof的区别
- declare
- MySql大全
- 1086. Tree Traversals Again (25)
- 微信营销三位一体
- 【Leetcode】Search in Rotated Sorted Array II
- 基于OpenStack(IceHouse+neutron) 部署 CloudFounry v183
- Python 中的 TK编程
- 大家来参考。MySQL多实例配置(一)
- 移动互联网时代的9大赚钱机会
- NSCT——Nonsubsampled contourlet 变换程序开发教程1_向望大海的鱼
- 大家来参考。MySQL多实例配置(二)