PTA 04-树6 Complete Binary Search Tree
数据结构选择
链表和数组都可以用来存储二叉树
链表的好处:当左右子树不平衡时,不会浪费不必要的空节点
数组的好处:完全二叉树
不会浪费任何一个空间
解题思路
根据中序填数组
Code
#include<iostream>
#include<algorithm>
#define Maxsize 2001
using namespace std;
int N,index=0;
int CBT[Maxsize],num[Maxsize];//CBT用于输出,num用来排序
void inorder(int root){//中序遍历递归求完全二叉树
if(root>N) return;//没有左/右子树->叶子结点
inorder(root*2);//递归左子树
CBT[root]=num[index++];//记录根节点
inorder(root*2+1);//递归右子树
}
int main(){
scanf("%d",&N);
for(int i=0;i<N;i++){
scanf("%d",&num[i]);
}
sort(num,num+N);//排序成中序遍历
inorder(1);
for(int i=1;i<=N;i++){
printf("%d",CBT[i]);
if(i!=N){
printf(" ");
}
}
return 0;
}