1020 Tree Traversals (25 分)
Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and inorder traversal sequences,you are supposed to output the level order traversal sequence of the corresponding binary tree. Input Specification:Each input file contains one test case. For each case,the first line gives a positive integer N (≤),the total number of nodes in the binary tree. The second line gives the postorder sequence and the third line gives the inorder sequence. All the numbers in a line are separated by a space. Output Specification:For each test case,print in one line the level order traversal sequence of the corresponding binary tree. All the numbers in a line must be separated by exactly one space,and there must be no extra space at the end of the line. Sample Input:7 2 3 1 5 7 6 4 1 2 3 4 5 6 7 Sample Output:基本思路: #include<iostream> #include<sstream> #include<algorithm> #include<map> #include<cmath> #include<cstdio> #include<string.h> #include<queue> #include<vector> using namespace std; struct Node { int data; Node *lchild,*rchild; }; void CreateTree(int inOrder[],int iL,int iR,int postOrder[],int pI,int pR,Node *&root) { int temp=0; while(inOrder[temp]!=postOrder[pR]) temp++; int leftLength=temp-iL; int rightLength=iR-temp; if(root==nullptr) { root =new Node(); root->data=postOrder[pR]; } if(leftLength>0) CreateTree(inOrder,iL,temp-1,postOrder,pI,pR-rightLength-1,root->lchild); if(rightLength>0) CreateTree(inOrder,temp+1,iR,pI+leftLength,pR-1,root->rchild); } int a[31]; void level(Node *root) { queue<Node*> q; q.push(root); int i=0; while(!q.empty()) { Node *temp=q.front(); q.pop(); a[i++]=temp->data; if(temp->lchild) q.push(temp->lchild); if(temp->rchild) q.push(temp->rchild); } } int main() { int n; cin>>n; int postOrder[n],inOrder[n]; for(int i=0; i<n; i++) cin>>postOrder[i]; for(int i=0; i<n; i++) cin>>inOrder[i]; Node *root=nullptr; CreateTree(inOrder,0,n-1,0,n-1,root); level(root); if(n>0) cout<<a[0]; for(int i=1;i<n;i++) cout<<" "<<a[i]; return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |