第一题
题目
编一C程序,它能把读入的整数依次插入到一个初始为空的二叉排序树中,一直读到
-9999
为止(-9999
不插入该二叉排序树)。输出该二叉排序树的前序序列、后序序列及叶结点的个数。(输入时,两个相邻的整数用空格隔开)。
解析
这个代码可以参考二叉树的遍历和二叉树前序、中序、后序遍历的非递归写法。
第二题
题目
编一C程序,它能对输入的一串整数(不多于
1000
个,以-9999
为结束标记)到数组a
中,再对a
的元素进行直接插入排序(从小到大排序),输出排序结果和所用关键字比较次数。(输入时,两个相邻的整数用空格隔开)。
解析
插入排序,这个要好好看看,很多排序算法,例如希尔排序,堆排序等等都是依赖于插入排序。
更详细的代码可以参考插入排序。
C语言
#define END -9999
#define MAX_SIZE 1005
int array[MAX_SIZE], n;
int cnt;
void InsertSort()
{
int i, j, k, tmp;
for (cnt = 0, i = 1; i < n; ++i) {
for (j = i - 1; j >= 0 && array[j] > array[i]; ++cnt, --j) {}
tmp = array[i];
for (k = i; k > j + 1; array[k] = array[k - 1], --k) {}
array[j + 1] = tmp;
}
}
int main()
{
int x;
for (n = 0; scanf("%d", &x) && x != END; array[n++] = x) {}
InsertSort();
printf("%d\n", cnt);
for (x = 0; x < n; printf("%d%c", array[x], " \n"[x + 1 == n]), ++x) {}
return 0;
}