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 (<=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:7 2 3 1 5 7 6 4 1 2 3 4 5 6 7Sample Output:
4 1 6 3 5 7 2
题意:根据题中所给出的后序遍历和中序遍历序列求树的层次遍历。
思路:先建立二叉树,再使用bfs就可以求解。
#include<iostream>
#include<queue>
using namespace std;
int postorder[40],inorder[40];
class Node
{
public:
int data;
Node *ld,*rd;
};
queue<Node*> st;
Node* CreateTree(int n,int *arry1,int *arry2)
{
if(n<=0) return NULL;
int k=0;
while(arry1[n-1]!=arry2[k])
k++;
Node *root=new Node;
root->data=arry1[n-1];
root->ld=CreateTree(k,arry1,arry2);
root->rd=CreateTree(n-k-1,arry1+k,arry2+k+1);
return root;
}
int main()
{
int n,i,j,k;
cin>>n;
for(i=0;i<n;i++)
cin>>postorder[i];
for(i=0;i<n;i++)
cin>>inorder[i];
Node *root=new Node;
root->ld=NULL;
root->rd=NULL;
root=CreateTree(n,postorder,inorder);
st.push(root);
//cout<<(st.back())->data<<endl;
int tag=0;
while(!st.empty())
{
if((st.front())->ld!=NULL) st.push((st.front())->ld);
if((st.front())->rd!=NULL) st.push((st.front())->rd);
if(tag==0) cout<<(st.front())->data,tag=1;
else cout<<" "<<(st.front())->data;
st.pop();
}
return 0;
}