PTA 7-4 树的遍历 (25 分)
根据树的后序遍历与中序遍历建立树,并层次遍历输出
和跟据前序遍历与中序遍历建树思路基本相同
#include <iostream>
#include <cstdio>
#include <queue>
#include<map>
#include<algorithm>
using namespace std;
template<typename T>
struct TreeNode
{
T data;
TreeNode<T> *lchild;
TreeNode<T> *rchild;
TreeNode(T n)
{
data=n;
lchild=NULL;
rchild=NULL;
}
};
template<typename T>
TreeNode<T> *HBinTree(T *LRV,T *LVR,int n)
{
if(n==0)
return NULL;
int k=0;
while (LRV[n-1]!=LVR[k])
k++;
TreeNode<T> *t=new TreeNode<T>(LRV[n-1]);
t->lchild=HBinTree(LRV,LVR,k);
t->rchild=HBinTree(LRV+k,LVR+k+1,n-k-1);
return t;
}
template<typename T>
void LevelOrder(TreeNode<T> *subtree,int n)
{
queue<TreeNode<T> *> q;
int c=0;
q.push(subtree);
while(!q.empty())
{
TreeNode<T> *t=q.front();
c++;
if(c<n)
{cout<<t->data<<" ";}
else
cout<<t->data<<endl;
q.pop();
if(t->lchild!=NULL)
{
q.push(t->lchild);
}
if(t->rchild!=NULL)
{
q.push(t->rchild);
}
}
}
int main()
{
int n;
int *LVR,*LRV;
cin>>n;
LVR=new int[n];
LRV=new int[n];
for(int i=0; i<n; i++)
{
cin>>LRV[i];
}
for(int i=0; i<n; i++)
{
cin>>LVR[i];
}
TreeNode<int> *root=HBinTree(LRV,LVR,n);
LevelOrder(root,n);
return 0;
}