File tree Expand file tree Collapse file tree 2 files changed +5
-3
lines changed Expand file tree Collapse file tree 2 files changed +5
-3
lines changed Original file line number Diff line number Diff line change 5
5
6
6
# 实现优先级队列
7
7
优先级队列(Priority Queue) 顾名思义,就是入队的时候可以给一个优先级,通常是个数字或者时间戳等,
8
- 当出队的时候我们希望按照给定的优先级出队,我们按照 TDD 的方式先来写测试代码:
8
+ 当出队的时候我们希望按照给定的优先级出队,我们按照 TDD(测试驱动开发) 的方式先来写测试代码:
9
9
10
10
``` py
11
11
def test_priority_queue ():
Original file line number Diff line number Diff line change 7
7
# BST 定义
8
8
9
9
二叉查找树是这样一种二叉树结构,它的每个节点包含一个 key 和它附带的数据,对于每个内部节点 V:
10
+
10
11
- 所有 key 小于 V 的都被存储在 V 的左子树
11
12
- 所有 key 大于 V 的都存储在 V 的右子树
12
13
@@ -164,7 +165,7 @@ bst = BST.build_from(NODE_LIST)
164
165
![ ] ( ./bst_remove_leaf.png )
165
166
166
167
#### 删除只有一个孩子的节点
167
- 删除有一个孩子的节点时,我们拿掉需要删除的节点,之后把它的父亲指向它的孩子就行,以为根据 BST
168
+ 删除有一个孩子的节点时,我们拿掉需要删除的节点,之后把它的父亲指向它的孩子就行,因为根据 BST
168
169
左子树都小于节点,右子树都大于节点的特性,删除它之后这个条件依旧满足。
169
170
170
171
![ ] ( ./bst_remove_node_with_one_child.png )
@@ -176,7 +177,7 @@ bst = BST.build_from(NODE_LIST)
176
177
177
178
但是这种方式可能会影响树的高度,降低查找的效率。这里我们用另一种非常巧妙的方式。
178
179
还记得上边提到的吗,如果你中序遍历 BST 并且输出每个节点的 key,你会发现就是一个有序的数组。
179
- [ 1 4 12 23 29 37 41 60 71 84 90 100] 。 这里我们定义两个概念,逻辑前任(predecessor)和后继(successor),请看下图:
180
+ ` [1 4 12 23 29 37 41 60 71 84 90 100] ` 。 这里我们定义两个概念,逻辑前任(predecessor)和后继(successor),请看下图:
180
181
181
182
![ ] ( ./predecessor_successor.png )
182
183
@@ -222,6 +223,7 @@ bst = BST.build_from(NODE_LIST)
222
223
def remove (self , key ):
223
224
assert key in self
224
225
self .size -= 1
226
+ return self ._bst_remove(self .root, key)
225
227
```
226
228
227
229
完整代码你可以在本章的 bst.py 找到。
You can’t perform that action at this time.
0 commit comments