深入理解二叉树(2)
数组下标是0的目的是为了方便计算,因为a[i] = *(a+i),数组名是首元素的地址, 所以当i= 0 时a[0] = *(a+0)正好可以表示。
建立大堆和小堆只需要考虑父亲和儿子的大小,不需要考虑兄弟之间的大小关系。
通常把堆(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统 虚拟进程地址空间中的堆是两回事,一个是数据结构,一个是操作系统中管理内存的一块区域分段。
二叉树顺序存储在物理上(虚拟的,看不见摸不着的)是一个数组,在逻辑上是一颗二叉树。
向下调整的时间复杂度是O(N);向上调整的时间复杂度是O(NlogN);
二叉树链式结构的实现:
任何一颗树都要遵循左子树访问完了再访问右子树
这是前序遍历的流程(采用的是递归算法),右子树也是一样的。
1 2 4 N N N 3 5 N N 6 N N
下面这些递归的算法需要好好思考一下:
递归回去的时候就是返回到当前的代码行然后进行下一行代码的执行。
递归的方法都是按照上面的来递推的。