题目链接: http://pat.zju.edu.cn/contests/pat-a-practise/1064
思路分析:
1)先对数组排好序。
2)采用中序遍历的方式,将排好序的元素逐个插入在完全二叉树中。
3)利用完全二叉树采用数组存储的方式,对于结点序号为index的结点,其左孩子结点2*i,右孩子结点为2*i+1,(结点编号从1开始)遍历。
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
using namespace std; int t[],a[];
int m=; void inOrder(int index){
if((index*)<=n) inOrder(*index);
t[index]=a[m++];
if((index*+)<=n) inOrder(*index+);
} int main(){
int n;
scanf("%d",&n); for(int i=;i<=n;i++){
scanf("%d",&a[i]);
} sort(a+,a+n+);
inOrder(); for(int i=;i<=n;i++){
printf("%d",t[i]);
if(i!=n) printf(" ");
} system("pause");
return ;
}