最详细的最小堆构建、插入、删除的过程图解
轉載:http://blog.csdn.net/hrn1216/article/details/51465270
1.簡介
? ? ? ?最小堆是一棵完全二叉樹,非葉子結點的值不大于左孩子和右孩子的值。本文以圖解的方式,說明
最小堆的構建、插入、刪除的過程。搞懂最小堆的相應知識后,最大堆與此類似。
2.最小堆示例
3.最小堆的構建
? ? ? 初始數(shù)組為:9,3,7,6,5,1,10,2
? ? ? 按照完全二叉樹,將數(shù)字依次填入。
? ? ? 填入后,找到最后一個結點(本示例為數(shù)字2的節(jié)點),從它的父節(jié)點(本示例為數(shù)字6的節(jié)點)
開始調整。根據(jù)性質,小的數(shù)字往上移動;至此,第1次調整完成。
? ? ? 注意,被調整的節(jié)點,還有子節(jié)點的情況,需要遞歸進行調整。
? ? ? 第二次調整,是數(shù)字6的節(jié)點數(shù)組下標小1的節(jié)點(比數(shù)字6的下標小1的節(jié)點是數(shù)字7的節(jié)點),
用剛才的規(guī)則進行調整。以此類推,直到調整到根節(jié)點。
? ? ? 以下是本示例的圖解:
4.最小堆的元素插入
? ? ? ?以上個最小堆為例,插入數(shù)字0。
? ? ? ?數(shù)字0的節(jié)點首先加入到該二叉樹最后的一個節(jié)點,依據(jù)最小堆的定義,自底向上,遞歸調整。
? ? ? ?以下是插入操作的圖解:
5.最小堆的節(jié)點刪除
? ? ? ?對于最小堆和最大堆而言,刪除是針對于根節(jié)點而言。
? ? ? ?對于刪除操作,將二叉樹的最后一個節(jié)點替換到根節(jié)點,然后自頂向下,遞歸調整。
? ? ? ?以下是圖解:
總結
以上是生活随笔為你收集整理的最详细的最小堆构建、插入、删除的过程图解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求字符串里面数字之和
- 下一篇: realloc函数使用总结