2.6 数据结构 --2.2 堆

数据结构子目录https://blog.****.net/qq_41106844/article/details/105554029

什么是堆

堆是一种特殊的完全二叉树。堆分两种,一种是大根堆,一种是小根堆。

大根堆

一颗完全二叉树,满足任意节点都比其子节点大。

 

 
2.6 数据结构 --2.2 堆
大根堆

 

小根堆

一颗完全二叉树,满足任意节点都比其子节点小。

 

 
2.6 数据结构 --2.2 堆
小根堆

 

堆的向下调整性质

当根节点的左右节点都是堆时,可以通过一次向下的调整来将其变成一个堆。
假设,根的左右子树都是堆,本身不是堆。

 

 
2.6 数据结构 --2.2 堆
不是堆

 

这里可以把它理解为一个列表[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.6 数据结构 --2.2 堆
不是堆

 

2.然后比较8,5,2谁大,然后列表就变成了:
[9,8,7,2,5,0,1,6,4,3]

 
2.6 数据结构 --2.2 堆
不是堆

3.然后比较6,4,2,然后列表就变成了:
[9,8,7,6,5,0,1,2,4,3]

 

 
2.6 数据结构 --2.2 堆

 

堆的增,删,改都依靠这个性质。

 
2.6 数据结构 --2.2 堆

接着10就会往上调整,小于10的向下移动。

 

 
2.6 数据结构 --2.2 堆

 

 
2.6 数据结构 --2.2 堆

 

删掉9,9的位置就有了空缺,8和6就会进行比较。

 

 

 
2.6 数据结构 --2.2 堆

 

改同理。