完全搜索二叉树
题目链接
1.利用数组实现
2.输入的是中序遍历,记得排序,排完序才是中序
3.输出层序遍历
参考代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define endl '\n'
#define ios ios::sync_with_stdio(false);cin.tie(0);
#define x first
#define y second
#define pb push_back
#define INF 0x7fffffff
#define debug(a) cout<<"======"<<a<<"======"<<endl;
#define int long long
typedef pair<int,int> pii;
inline int gcd(int a,int b){return b ? gcd(b, a % b) : a;}
inline int lcm(int a,int b){return a/gcd(a,b)*b;}
const int N = 1e5 + 10;
//const int mod = 998244353;
int dx[4] = {-1,0,1,0};
int dy[4] = {0,1,0,-1};
int n, m, k, t;
int zhong[N];
int ans[N];
void dfs(int i){
if(i > n)
return;
dfs(2*i);//左儿子
t ++;
ans[i] = zhong[t];//层序的核心!!!!!
dfs(2*i + 1);//右儿子
}
void work(){
cin >> n;
for(int i = 1;i <= n;++ i){
cin >> zhong[i];
}
sort(zhong + 1,zhong +n+1);
dfs(1);
for(int i = 1;i <= n;i ++){
if(i != n) cout << ans[i] << " ";
else cout << ans[i];
}
}
signed main(){
ios;
int T = 1;
//cin >> T;
while(T --){
work();
}
return 0;
}