AcWing 1589. 构建二叉搜索树
原题链接
中等
作者:
leo123456
,
2020-08-22 16:58:16
,
所有人可见
,
阅读 553
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int N=110;
int n;
int inorder[N],in_i;
int l[N],r[N],w[N];
void dfs(int u)
{
if(l[u]!=-1) dfs(l[u]);
w[u]=inorder[in_i++];
if(r[u]!=-1) dfs(r[u]);
// if(u==-1) return ;
// if(l[u]!=-1) dfs(l[u]);
// w[u]=inorder[in_i++];
// if(r[u]!=1) dfs(r[u]);
}
void bfs(int u)
{
queue<int> q;
q.push(u);
bool flag=true;
while(!q.empty())
{
auto t=q.front();
q.pop();
if(flag)
{
cout<<w[t];
flag=false;
}
else cout<<' '<<w[t];
if(l[t]!=-1) q.push(l[t]);
if(r[t]!=-1) q.push(r[t]);
}
}
int main()
{
cin>>n;
for(int i=0;i<n;i++) cin>>l[i]>>r[i];
for(int i=0;i<n;i++) cin>>inorder[i];
sort(inorder,inorder+n);
dfs(0);
bfs(0);
return 0;
}
可以,这里用flag处理末尾空格的方式不错!