A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties:
A Complete Binary Tree (CBT) is a tree that is completely filled, with the possible exception of the bottom level, which is filled from left to right.
Now given a sequence of distinct non-negative integer keys, a unique BST can be constructed if it is required that the tree must also be a CBT. You are supposed to output the level order traversal sequence of this BST.
Each input file contains one test case. For each case, the first line contains a positive integer N (≤1000). Then N distinct non-negative integer keys are given in the next line. All the numbers in a line are separated by a space and are no greater than 2000.
For each test case, print in one line the level order traversal sequence of the corresponding complete binary search tree. All the numbers in a line must be separated by a space, and there must be no extra space at the end of the line.
10
1 2 3 4 5 6 7 8 9 0
6 3 8 1 5 7 9 0 2 4
具体代码实现为:
#include
#include
int a[1005],T[1005];
void build(int ALeft,int ARight,int TRoot);
int main()
{
int i,j,t,N;
int first = 1;
scanf("%d",&N);
for(i=0; i a[i+1]){
t = a[i];
a[i] = a[i+1];
a[i+1] = t;
}
}
}
build(0,N-1,0); //建树
/*层序输出该完全二叉搜索树*/
for(i=0; i pow(2,h-1)) x = pow(2,h-1); //如果x大于左子树最下面一层所能拥有的最大结点数,就使其等于它
L = pow(2,h-1)-1+x; //左子树的结点个数
return L;
}
void build(int ALeft,int ARight,int TRoot)
{
int n,L;
int LeftTRoot, RightTRoot;
n = ARight-ALeft+1; //当前剩余结点数量
if( n == 0 ) return;
L = GetLeftLength(n); //计算n个结点的完全二叉树当前结点的左子树有多少个结点
T[TRoot] = a[ALeft+L]; //当前根结点的值
LeftTRoot = TRoot*2+1; //当前根结点左子树的根结点(左儿子)的下标
RightTRoot = LeftTRoot+1; //当前根结点右子树的根结点(右儿子)的下标
build(ALeft,ALeft+L-1,LeftTRoot);
build(ALeft+L+1,ARight,RightTRoot);
}