问答题 设从键盘输入一个整数的序列:n,a 1 ,a 2 ,…,a n ,其中n表示连续输入整数的个数。
(1)试编写一程序按整数值建立一个二叉排序树。
(2)在(1)的基础上将此二叉树上的各整数按降序写入一磁盘文件中。
【正确答案】
【答案解析】二叉排序树的建立问题前面第3题的(1)中已介绍,此处不再赘述。将二叉排序树上的各整数按降序写入磁盘,要对二叉排序树进行“中序遍历”,这里的“中序遍历”要采取“右根左”。为方便起见,先将整数写入一全局变量数组中,再写入磁盘文件中。
int i=0, a[n]; //长度为n的整型数组
void InOrder(BSTree t){
//先右后左的中序遍历二叉排序树t,假定该树t已在第3题(1)中生成
if(t){
InOrder(t->rchild);
a[i++]=t->key;
InOrder(t->lchild);
}
}
void SaveToDisk(){ //将二叉排序树上的各整数按降序写入磁盘
FILE *fp;
if((fp=fopen("filel.dat", "wb"))==null){
printf("file can not open!/n"); exit(0);
}
fwrite(a, sizeof(int),n,fp); //将数组a中的n个整数写入磁盘
felose(fp); //关闭文件
}