为什么Heaplify 过程要从第一个非叶子节点开始往下shiftdown? 可以从根节点开始往下shiftdowndown 么?
来源:4-5 基础堆排序和Heapify
缱绻091
2020-01-30
如题
为什么Heaplify 过程要从第一个非叶子节点开始往下shiftdown? 可以从根节点开始往下shiftdowndown 么?谢谢·!
写回答
1回答
-
不可以。因为必须保证子树是堆,才能得到正确的结果。
以最小堆为例,比如初始是这样的:
9 / \ 7 8 / \ / \ 3 4 1 2
如果从根节点开始开始,下一步要具体怎么做?根据我们的下沉逻辑,先和 7 换(7 比 8 小),再和 3 换(3 比 4 小),结果是这样的:
7 / \ 3 8 / \ / \ 9 4 1 2
显然是不正确的。
但如果从第一个飞叶子节点开始反向处理,则没有这个问题。手动试一试这个例子,再仔细体会一下为什么反向处理没有这个问题?
继续加油!:)
112020-01-31
相似问题
叶子节点定义
回答 1