题意: 给一串构成树的序列,已知该树是完全二叉搜索树,求它的层序遍历的序列
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;
}