此题要求根据输入数据得到该数据 的 完全二叉搜索树的层序遍历结果。那是不是要建完全二叉搜索树?怎么建?或者不建树得到结果?功力不够,都不会啊。
度娘一下,被别人的实现吓到了,感觉太复杂太长了,头疼~
然而又被别人的实现惊艳到了,太厉害了~
参考: https://blog.csdn.net/Roland_WuZF/article/details/49389995
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 #define MaxSize 1001 5 6 int Seq[MaxSize], LevelSeq[MaxSize]; 7 int j = 0; 8 9 int compare(const void *a, const void *b); 10 void InOrderStore(int root, int N); 11 12 int main() 13 { 14 int i, N; 15 scanf("%d", &N); 16 17 for ( i = 0; i < N; i++ ) { 18 scanf("%d", &Seq[i]); 19 } 20 // 排序 (increase) 得到 中序遍历的顺序 21 qsort(Seq, N, sizeof(int), compare); 22 23 InOrderStore(1, N); 24 25 printf("%d", LevelSeq[1]); 26 for ( i = 2; i <= N; i++ ) { 27 printf(" %d", LevelSeq[i]); 28 } 29 30 return 0; 31 } 32 /* 33 以 中序遍历 的方式 使用数组LevelSeq存储 中序遍历 得到的数组Seq, 34 */ 35 void InOrderStore(int root, int N) 36 { 37 if ( root <= N ) { 38 InOrderStore(root*2, N); 39 LevelSeq[root] = Seq[j++]; 40 InOrderStore(root*2+1, N); 41 } 42 } 43 44 int compare(const void *a, const void *b) 45 { 46 return ( *(int*)a - *(int*)b ); 47 }