C语言数据结构与算法---基础知识 9

38 阅读1分钟

堆的建立

image.png

堆分为最大堆最小堆 具有以下两个性质:

1.结构性;用数组表示的完全二叉树

2.有序性;每一个节点都是他的子树所有节点的最大值或者最小值; 就像金字塔,最上面的最大或者最上面的最小,再层层变小或变大;

堆的插入

image.png

这里注意要判断这个最大堆的顺序,就把插进去的数与它的父节点比较大小,而父节点的下标为i/2(左子节点的下标为2i,右子节点的下标为2i+1)

堆的删除

image.png

用堆的最后一个元素填补堆顶空缺,然后让这个 “较小的元素” 向下 “沉” 到合适的位置(因为堆顶需要保持最大值,而填补的元素可能较小)。

哈弗曼树

树的建立

image.png

哈弗曼树是指每个子节点到树根的路径长*它的权重相加最小的树

也叫做最优二叉树

查找元素对应的根节点

image.png

两棵树并起来

image.png

插入

image.png