refactor: Replace 结点 with 节点 (#452)

* Replace 结点 with 节点
Update the footnotes in the figures

* Update mindmap

* Reduce the size of the mindmap.png
This commit is contained in:
Yudong Jin
2023-04-09 04:32:17 +08:00
committed by GitHub
parent 3f4e32b2b0
commit 1c8b7ef559
395 changed files with 2056 additions and 2056 deletions
+15 -15
View File
@@ -27,23 +27,23 @@ func newMaxHeap(nums []any) *maxHeap {
// 将列表元素原封不动添加进堆
h := &maxHeap{data: nums}
for i := len(h.data) - 1; i >= 0; i-- {
// 堆化除叶点以外的其他所有
// 堆化除叶点以外的其他所有
h.siftDown(i)
}
return h
}
/* 获取左子点索引 */
/* 获取左子点索引 */
func (h *maxHeap) left(i int) int {
return 2*i + 1
}
/* 获取右子点索引 */
/* 获取右子点索引 */
func (h *maxHeap) right(i int) int {
return 2*i + 2
}
/* 获取父点索引 */
/* 获取父点索引 */
func (h *maxHeap) parent(i int) int {
// 向下整除
return (i - 1) / 2
@@ -71,22 +71,22 @@ func (h *maxHeap) peek() any {
/* 元素入堆 */
func (h *maxHeap) push(val any) {
// 添加
// 添加
h.data = append(h.data, val)
// 从底至顶堆化
h.siftUp(len(h.data) - 1)
}
/* 从点 i 开始,从底至顶堆化 */
/* 从点 i 开始,从底至顶堆化 */
func (h *maxHeap) siftUp(i int) {
for true {
// 获取点 i 的父
// 获取点 i 的父
p := h.parent(i)
// 当“越过根点”或“点无需修复”时,结束堆化
// 当“越过根点”或“点无需修复”时,结束堆化
if p < 0 || h.data[i].(int) <= h.data[p].(int) {
break
}
// 交换两
// 交换两
h.swap(i, p)
// 循环向上堆化
i = p
@@ -100,9 +100,9 @@ func (h *maxHeap) pop() any {
fmt.Println("error")
return nil
}
// 交换根点与最右叶点(即交换首元素与尾元素)
// 交换根点与最右叶点(即交换首元素与尾元素)
h.swap(0, h.size()-1)
// 删除
// 删除
val := h.data[len(h.data)-1]
h.data = h.data[:len(h.data)-1]
// 从顶至底堆化
@@ -112,10 +112,10 @@ func (h *maxHeap) pop() any {
return val
}
/* 从点 i 开始,从顶至底堆化 */
/* 从点 i 开始,从顶至底堆化 */
func (h *maxHeap) siftDown(i int) {
for true {
// 判断点 i, l, r 中值最大的点,记为 max
// 判断点 i, l, r 中值最大的点,记为 max
l, r, max := h.left(i), h.right(i), i
if l < h.size() && h.data[l].(int) > h.data[max].(int) {
max = l
@@ -123,11 +123,11 @@ func (h *maxHeap) siftDown(i int) {
if r < h.size() && h.data[r].(int) > h.data[max].(int) {
max = r
}
// 若点 i 最大或索引 l, r 越界,则无需继续堆化,跳出
// 若点 i 最大或索引 l, r 越界,则无需继续堆化,跳出
if max == i {
break
}
// 交换两
// 交换两
h.swap(i, max)
// 循环向下堆化
i = max