接着上次的,这里主要介绍的是堆排序,二叉树的遍历,以及之前讲题时答应过的简单二叉树问题求解 给一组数据,升序(降序)排列 思路 思考:如果排列升序,我们应该建什么堆? 首先,如果排升序,数列最后一个数是 最大数,我们的思路是通过 向上调整 或者 向下调整,数组存放的第一个数不是最小值(小堆)就是最大值(大堆),此时我们将最后一个数与第一个数交换,使得最大值放在最后,此时再使用向上调整 或者 向下调整,得到第二大的数,重复上述动作,很明显,我们需要的第一个数是最大值,因此我们需要建大堆 反之,排降序,建立小堆 代码 #include<stdio.h> void downAdjust(int* pa, int parent, int n) { int child = parent * 2 + 1; while (child < n) { if (child + 1 < n && pa[child] > pa[child + 1]) { child++; } if (pa[parent] > pa[child]) { swap(&pa[parent], &pa[child]); }...