二叉树中的层数就像是平时楼层的楼层数
项目中heap.h和heap.c是把一个创建实现heap类型的数据结构操作的模块分成了俩部分,这个就像一个头链,first是heap.h是声明结构体和函数接口,再到second处的heap.c来进行实现,我们在second处却是在服务头处的功能,即这样子的链式组织方式不同于我们类似vue项目的那种的一体式。
利用电脑码码是手写效率的300倍
PreOder的本质还是遍历,那么里面包含的都不会缺掉遍历的基本操作;这里要借用递归的思想
函数AdjustDown的本质应该是交换函数Swap;在设计这个接口的时候,类似perror函数浓缩了printf与strerror与errno后传参就是简单的一个string说明参数了,这是讲浓缩;Swap的接口中表明了要交换的两个参数,AdjustDown的特殊处在于域(数概中的概率也就是归结为域了,或者把域都在归结到集合上,是不是说远了;我知道局部而去推测外部的时候,外部的情况是一个未知变量,如何找到一个合适的等式去解出它就是一个大问题了),它是基于Swap,却是全局的,操作的数据只是包含在其中的一部分,即我来了,我跟你所我身上哪个地方你处理一下,然后你在我那个地方的局部进行操作,对了,这个其实就是数组操作,那么它其实就是类似查找了,它高于查找的地方又在哪里呢?
我们学习数据结构中基本的抽象数据类型--顺序表和链表时,查找可以组合任意位置的增删变成指定元素的增删了,那AdjustDown其实只是组合了Swap,而不能说是AdjustDown的本质是Swap,那AdjustDown的别的组件是什么呢?我觉得是它的结构,这也是为什么说程序= 算法+数据结构把,这里的AdjustDown程序就是这样的一个基于Swap的算法加上堆这种数据结构;
//小堆
void AdjustDown(int* a, int n, int* root)
{
int parent = root;
int child = parent*2 + 1;
if(a[parent] > a[child])
{
Swap(&a[parent], &a[child]);
}
}
二叉树的增删查改没有意义
递归就是看上去简单,但是理解起来不简单
翻转二叉树
另一个树的子树