【题解】
思路:从根节点开始,找到每一层的根节点,然后对左右子树进行递归建树。最后bfs层序遍历输出整棵树。
【代码】
#include <bits/stdc++.h>
using namespace std;
int mid[35],post[35];
struct node{
int lson,rson;
}f[35];
int build(int lmid,int rmid,int lpost,int rpost) //lmid,rmid表示中序遍历 lpost,rpost表示后序遍历
{
if(lmid>rmid) return 0;
int root=post[rpost];
int fa=lmid;
while(mid[fa]!=root) fa++; //在中序遍历中找到根节点
int len=fa-lmid;
f[root].lson=build(lmid,fa-1,lpost,lpost+len-1);
f[root].rson=build(fa+1,rmid,lpost+len,rpost-1);
return root;
}
void bfs(int x)
{
queue <int> q;
vector <int> v;
q.push(x);
while(!q.empty())
{
int w=q.front();
q.pop();
if(!w) break;
v.push_back(w);
if(f[w].lson) q.push(f[w].lson);
if(f[w].rson) q.push(f[w].rson);
}
int len=v.size();
for(int i=0;i<len;i++)
printf("%d ",v[i]);
return;
}
int main()
{
int n