2.6 数据结构 --2.2 堆
数据结构子目录https://blog.****.net/qq_41106844/article/details/105554029
堆
什么是堆
堆是一种特殊的完全二叉树。堆分两种,一种是大根堆,一种是小根堆。
大根堆
一颗完全二叉树,满足任意节点都比其子节点大。
大根堆
小根堆
一颗完全二叉树,满足任意节点都比其子节点小。
小根堆
堆的向下调整性质
当根节点的左右节点都是堆时,可以通过一次向下的调整来将其变成一个堆。
假设,根的左右子树都是堆,本身不是堆。
不是堆
这里可以把它理解为一个列表[2,9,7,8,5,0,1,6,4,3]
1.先把2拿出,然后比较9和7谁更大,然后列表变成了:
[9,2,7,8,5,0,1,6,4,3]
不是堆
2.然后比较8,5,2谁大,然后列表就变成了:
[9,8,7,2,5,0,1,6,4,3]
不是堆
3.然后比较6,4,2,然后列表就变成了:
[9,8,7,6,5,0,1,2,4,3]
堆
堆的增,删,改都依靠这个性质。
增
增
接着10就会往上调整,小于10的向下移动。
增
删
删
删掉9,9的位置就有了空缺,8和6就会进行比较。
删
改同理。