mirror of
https://github.com/krahets/hello-algo.git
synced 2026-04-24 02:21:30 +08:00
Revised the book. (#987)
This commit is contained in:
@@ -14,14 +14,14 @@
|
||||
|
||||
实际上,我们可以实现一种更为高效的建堆方法,共分为两步。
|
||||
|
||||
1. 将列表所有元素原封不动添加到堆中,此时堆的性质尚未得到满足。
|
||||
2. 倒序遍历堆(即层序遍历的倒序),依次对每个非叶节点执行“从顶至底堆化”。
|
||||
1. 将列表所有元素原封不动地添加到堆中,此时堆的性质尚未得到满足。
|
||||
2. 倒序遍历堆(层序遍历的倒序),依次对每个非叶节点执行“从顶至底堆化”。
|
||||
|
||||
**每当堆化一个节点后,以该节点为根节点的子树就形成一个合法的子堆**。而由于是倒序遍历,因此堆是“自下而上”构建的。
|
||||
|
||||
之所以选择倒序遍历,是因为这样能够保证当前节点之下的子树已经是合法的子堆,这样堆化当前节点才是有效的。
|
||||
|
||||
值得说明的是,**叶节点没有子节点,天然就是合法的子堆,因此无须堆化**。如以下代码所示,最后一个非叶节点是最后一个节点的父节点,我们从它开始倒序遍历并执行堆化。
|
||||
值得说明的是,**由于叶节点没有子节点,因此它们天然就是合法的子堆,无须堆化**。如以下代码所示,最后一个非叶节点是最后一个节点的父节点,我们从它开始倒序遍历并执行堆化:
|
||||
|
||||
```src
|
||||
[file]{my_heap}-[class]{max_heap}-[func]{__init__}
|
||||
|
||||
Reference in New Issue
Block a user