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
#include<iostream>
#include<queue>
using namespace std;
typedef struct Node
{
int value;
int lchild;
int rchlid;
}Node;
int postOrder[30];
int loc[30];
Node inOrder[30];
int maxloc(int m,int n)
{
if(m>n)
return (-1);
int i;
int maxt=m;
int maxk=loc[m];
for(i=m+1;i<=n;++i)
{
if(maxk<loc[i])
{
maxt=i;
maxk=loc[i];
}
}
return maxt;
}
void BinaryTree(int m,int start,int n)
{
if(m>n)
return;
else if(m==n)
{
inOrder[start].lchild=-1;
inOrder[start].rchlid=-1;
return;
}
int k1=maxloc(m,start-1);
inOrder[start].lchild=k1;
BinaryTree(m,k1,start-1);
int k2=maxloc(start+1,n);
inOrder[start].rchlid=k2;
BinaryTree(start+1,k2,n);
}
int main()
{
int m;
int i,j;
queue<int> st;
cin>>m;
for(i=0;i<m;++i)
{
cin>>postOrder[i];
}
for(i=0;i<m;i++)
{
cin>>inOrder[i].value;
}
for(i=0;i<m;++i)
{
for(j=0;j<m;j++)
{
if(inOrder[i].value==postOrder[j])
{
loc[i]=j;
break;
}
}
}
int start=maxloc(0,m-1);
BinaryTree(0,start,m-1);
cout<<inOrder[start].value;
i=1;
do
{
if(inOrder[start].lchild>=0)
st.push(inOrder[start].lchild);
if(inOrder[start].rchlid>=0)
st.push(inOrder[start].rchlid);
if(!st.empty())
{
start=st.front();
cout<<" "<<inOrder[start].value;
++i;
st.pop();
}
}while(i!=m);//!!st.empty()当是5
//! 6 7 8 2 4
//! 6 7 8 4 2就会出错!!因为把7输出后queue为空,
//! 故这个判断有误///
//! 结果4 8 2 7
cout<<endl;
}