#include<iostream>
#include<vector>
#include<queue>
using namespace std;
typedef struct BinTree
{
int data;
BinTree* lchild;
BinTree* rchild;
}BinTree;
vector<int> result;
void RebuildTree(BinTree* &Tree,int *pre,int *in,int len)
{
Tree=new BinTree;
if(len==0)
{
delete Tree;
Tree=NULL;
return;
}
int index=0;
while(*(pre)!=*(in+index)) index++;
Tree->data=*(pre);
RebuildTree(Tree->lchild,pre+1,in,index);
RebuildTree(Tree->rchild,pre+1+index,in+1+index,len-(index+1));
}
void search(BinTree* Tree)
{
if(Tree==NULL) return;
queue<BinTree*> que;
que.push(Tree);
while(!que.empty())
{
BinTree* cur=que.front();
que.pop();
result.push_back(cur->data);
if(cur->rchild!=NULL) que.push(cur->rchild);
if(cur->lchild!=NULL) que.push(cur->lchild);
}
}
int main()
{
int pre[101];
int in[101];
int length;
while(cin>>length)
{
result.clear();
for(int i=0;i<length;i++) cin>>pre[i];
for(int i=0;i<length;i++) cin>>in[i];
BinTree* tree;
RebuildTree(tree,pre,in,length);
search(tree);
for(int i=0;i<result.size()-1;i++) cout<<result[i]<<" ";
cout<<result[result.size()-1]<<endl;
}
return 0;
}
前中序遍历建树,并输出层次遍历
猜你喜欢
转载自blog.csdn.net/qq_40634175/article/details/88767869
今日推荐
周排行