题目链接: http://pat.zju.edu.cn/contests/pat-a-practise/1064
思路分析:
1)先对数组排好序。
2)采用中序遍历的方式,将排好序的元素逐个插入在完全二叉树中。
3)利用完全二叉树采用数组存储的方式,对于结点序号为index的结点,其左孩子结点2*i,右孩子结点为2*i+1,(结点编号从1开始)遍历。
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <algorithm> 4 using namespace std; 5 6 7 int t[1001],a[1001]; 8 int m=1; 9 10 void inOrder(int index){ 11 if((index*2)<=n) inOrder(2*index); 12 t[index]=a[m++]; 13 if((index*2+1)<=n) inOrder(2*index+1); 14 } 15 16 int main(){ 17 int n; 18 scanf("%d",&n); 19 20 for(int i=1;i<=n;i++){ 21 scanf("%d",&a[i]); 22 } 23 24 sort(a+1,a+n+1); 25 inOrder(1); 26 27 for(int i=1;i<=n;i++){ 28 printf("%d",t[i]); 29 if(i!=n) printf(" "); 30 } 31 32 system("pause"); 33 return 0; 34 }