题目描述 给定一个每个元素都唯一的序列,可将其构造成唯一的一棵完全二叉查找树。先要求根据输入的序列构造一棵完全二叉树,输出其层序序列。
#include <iostream>
#include <algorithm>
using namespace std;
struct CTreeNode {
int left;
int right;
int data;
} ;
CTreeNode CTree[ 1001 ] ;
int seq[ 1001 ] ;
int TCount = 0 ;
void CreateCTree ( int n) ;
void fillCTree ( int i) ;
int main ( ) {
int n;
cin >> n;
for ( int i = 1 ; i <= n; ++ i) cin >> seq[ i] ;
sort ( seq + 1 , seq + 1 + n) ;
CreateCTree ( n) ;
for ( int i = 1 ; i <= n; ++ i) {
cout << CTree[ i] . data;
if ( i != n) cout << " " ;
}
}
void CreateCTree ( int n) {
for ( int i = 1 ; i <= n; ++ i) {
if ( 2 * i <= n) {
CTree[ i] . left = 2 * i;
}
else {
CTree[ i] . left = - 1 ;
}
if ( 2 * i + 1 <= n) {
CTree[ i] . right = 2 * i + 1 ;
}
else {
CTree[ i] . right = - 1 ;
}
}
fillCTree ( 1 ) ;
}
void fillCTree ( int i) {
if ( CTree[ i] . left != - 1 ) {
fillCTree ( CTree[ i] . left) ;
}
CTree[ i] . data = seq[ ++ TCount] ;
if ( CTree[ i] . right != - 1 ) {
fillCTree ( CTree[ i] . right) ;
}
}