题目

题意: 给一串构成树的序列,已知该树是完全二叉搜索树,求它的层序遍历的序列
tip:对于完全二叉树,按顺序1~n编号,若父节点为i;则左孩子为2i,右孩子为2i+1;若树深度为k,则前k-1为满二叉树;因此判定当2i<=n时,建立左子树,当2i+1<=n时,建立右子树

#include<iostream>
#include<algorithm>
using namespace std;
int s[1003];
int level[1003];
int n,c=0;
void dfs(int root) {
	if(root>=n)
		return ;
	dfs(2*root+1);//左孩子 
	level[root]=s[c++];
	dfs(2*root+2);//右孩子 
}
int main() {
	cin>>n;
	for(int i=0; i<n; ++i)
		cin>>s[i];
	sort(s,s+n);
	dfs(0);
	cout<<level[0];
	for(int i=1; i<n; ++i)
		cout<<" "<<level[i];
	return 0;
}