1.青铜挑战——堆结构
1.堆的概念与特征
堆是将一组数据按照完全二叉树的存储顺序,将数据存储在一个一维数组中的结构。堆中有两种结构,一种称为大顶堆,一种称为小顶堆
小顶堆:任意节点的值均小于等于他的左右孩子,并且最小的值位于堆顶,即根节点处
大顶堆:任意节点的值均大于等于它的左右孩子,并且最大的值位于堆顶,即根结点处。
2 堆的构造过程
3 插入过程
将元素插入到保持其为完全二叉树的最后一个位置,然后顺着这条支路一直向上调正,没前进一层就要保证其子树都满足堆否则就去处理子树,直到完全满足要求
4 删除操作
堆 一般都是对堆中的数据进行操作都是针对堆顶的元素,即每次都从堆中获得最大值或最小值
删除的时候也是删除堆顶。如果直接删掉堆顶,整个结构就被破坏了,所以实际策略是先将堆中最后一个元素和堆顶元素进行替换,然后删除堆中最后一个元素。之后再从根开始逐步与左右比较,谁更大谁上位。然后再继续与子树比较,如果有更大的继续交换,直到自己所在的子树也满足大顶堆。
关于堆的问题:
查找:找大用小,大的进,找小用大,小的进
排序:升序用小,降序用大
查找的口诀:找K大,则用小堆,后续数据只有比根元素更大时才允许进入堆。