PAT_1020: Tree Traversals

来源:互联网 发布:清空文件夹内容 linux 编辑:程序博客网 时间:2024/05/20 17:23

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 (<=30), 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:
72 3 1 5 7 6 41 2 3 4 5 6 7
Sample Output:
4 1 6 3 5 7 2
备注:具体方法参见文章 http://www.cnblogs.com/fzhe/archive/2013/01/07/2849040.html
#include<iostream>#include<queue>using namespace std;typedef struct node{int id;struct node* left;struct node* right;}NODE;NODE* ConstructTree(int* post_order, int* in_order, int n_nodes){if(n_nodes==0)return NULL;NODE* root = new NODE;root->id = post_order[n_nodes-1];int rootIndex;for(rootIndex=0;rootIndex<n_nodes;rootIndex++){if(in_order[rootIndex] == root->id)break;}root->left = ConstructTree(post_order,in_order,rootIndex);root->right = ConstructTree(post_order+rootIndex,in_order+rootIndex+1,n_nodes-rootIndex-1);return root;}void LevelOrder(NODE* node){queue<NODE*> q;q.push(node);while(!q.empty()){NODE* n = q.front();q.pop();if(n->left)q.push(n->left);if(n->right)q.push(n->right);if(!q.empty())cout<<n->id<<" ";elsecout<<n->id;}}int main(){int n_nodes;cin>>n_nodes;int* post_order = new int[n_nodes];int* in_order = new int[n_nodes];for(int i=0;i<n_nodes;i++)cin>>post_order[i];for(int i=0;i<n_nodes;i++)cin>>in_order[i];NODE* root = ConstructTree(post_order,in_order,n_nodes);LevelOrder(root);return 0;}


原创粉丝点击