1064 Complete Binary Search Tree (BST&CBT)

思路: d f s dfs dfs,因为 B S T BST BST的中序遍历是非递减序,而 C B T ( C o m p l e t e   B i n a r y   T r e e ) CBT(Complete\ Binary \ Tree) CBT(Complete Binary Tree) 是完全二叉搜索树,记 r o o t root root为编号 0 0 0
左儿子为: r o o t × 2 + 1 root\times 2+1 root×2+1
右儿子为: r o o t × 2 + 2 root\times 2+2 root×2+2
最后层次序列就是 C B T CBT CBT按照编号从小到大依次输出即可。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e3+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a,b) memset(a,b,sizeof a)
#define lx x<<1
#define rx x<<1|1
#define reg register
#define PII pair<int,int>
#define fi first
#define se second
#define pb push_back
#define il inline
int n,a[N],ans[N],cnt;
void dfs(int rt){
	if(rt<n){
		dfs((rt<<1)+1);
		ans[rt]=a[cnt++];
		dfs((rt<<1)+2);
	}
}
int main(){
	scanf("%d",&n);
	for(int i=0;i<n;i++) scanf("%d",&a[i]);
	sort(a,a+n);dfs(0);
	printf("%d",ans[0]);
	for(int i=1;i<n;i++) printf(" %d",ans[i]);
	return 0;
}