Skip to content

Commit fb2309a

Browse files
committed
增加堆排序图例;思考提示
1 parent 0852a06 commit fb2309a

File tree

4 files changed

+7
-2
lines changed

4 files changed

+7
-2
lines changed

docs/14_树与二叉树/tree.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
- 根节点(root): 树的最上层的节点,任何非空的树都有一个节点
1515
- 路径(path): 从起始节点到终止节点经历过的边
16-
- 父亲(parent):除了根节点,每个节点的上一层又边连接的节点就是它的父亲(节点)
16+
- 父亲(parent):除了根节点,每个节点的上一层边连接的节点就是它的父亲(节点)
1717
- 孩子(children): 每个节点由边指向的下一层节点
1818
- 兄弟(siblings): 同一个父亲并且处在同一层的节点
1919
- 子树(subtree): 每个节点包含它所有的后代组成的子树
@@ -211,7 +211,9 @@ btree.preorder_trav(btree.root) # 输出 A, B, D, E, H, C, F, G, I, J
211211
- 请你完成二叉树的中序遍历和后序遍历以及单元测试
212212
- 树的遍历我们用了 print,请你尝试换成一个 callback,这样就能自定义处理树节点的方式了。
213213
- 请问树的遍历操作时间复杂度是多少?假设它的 size 是 n
214+
- 你能用非递归的方式来实现树的遍历吗?我们知道计算机内部使用了 stack,如果我们自己模拟如何实现?请你尝试完成
214215

215216

216217
# 延伸阅读
217218
- 《Data Structures and Algorithms in Python》 13 章 Binary Trees
219+
- [https://www.geeksforgeeks.org/iterative-preorder-traversal/](https://www.geeksforgeeks.org/iterative-preorder-traversal/)

docs/15_堆与堆排序/heap_and_heapsort.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
- 获取并移除根节点的值。每次我们都可以获取最大值或者最小值。这个时候需要把底层最右边的节点值替换到 root 节点之后
2121
执行 sift-down 操作。
2222

23+
![](./siftup.png)
24+
![](./siftdown.png)
25+
2326
# 堆的表示
2427
上一章我们用一个节点类和二叉树类表示树,这里其实用数组就能实现堆。
2528

@@ -126,7 +129,7 @@ python 其实自带了 heapq 模块,用来实现堆的相关操作,原理是
126129
- 这里我用最大堆实现了一个 heapsort_reverse 函数,请你实现一个正序排序的函数。似乎不止一种方式
127130
- 请你实现一个最小堆,你需要修改那些代码呢?
128131
- 我们实现的堆排序是 inplace 的吗,如果不是,你能改成 inplace 的吗?
129-
- 堆排序的时间复杂度是多少? siftup 和 siftdown 的时间复杂度是多少?
132+
- 堆排序的时间复杂度是多少? siftup 和 siftdown 的时间复杂度是多少?(小提示:考虑树的高度,它决定了操作次数)
130133

131134

132135
# 延伸阅读

docs/15_堆与堆排序/siftdown.png

114 KB
Loading

docs/15_堆与堆排序/siftup.png

105 KB
Loading

0 commit comments

Comments
 (0)