数据结构之堆
堆(heap)
- 定义
堆是一种比较特殊的数据结构,它是利用完全二叉树的结构来维护一组数据,可以看做是一棵树的数组对象,说白了,堆就是用数组实现的二叉树。根据根节点的值还分为大根堆和小根堆。在最大堆中,父节点的值比每一个子节点的值都要大。在最小堆中,父节点的值比每一个子节点的值都要小。例如下图就是一个大根堆:
- 堆和二叉树的区别
虽然说堆是利用完全二叉树的结果来维护数据,但和二叉树还是有较大差别的:
- 节点的大小和顺序:在二叉树中,左子节点必须比父节点小,右子节点必须必比父节点大。但是在堆中并非如此。在最大堆中两个子节点都必须比父节点小,而在最小堆中,它们都必须比父节点大。
- 内存占用:普通树占用的内存空间比它们存储的数据要多,因为需要为节点对象分配指针;而堆只需要数组对象,不需要指针
- 搜索:在二叉树中搜索会很快,但是在堆中搜索会很慢。在堆中搜索不是第一优先级,因为使用堆的目的是将最大(或者最小)的节点放在最前面,从而快速的进行相关插入、删除操作。