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 55
66# 实现优先级队列
77优先级队列(Priority Queue) 顾名思义,就是入队的时候可以给一个优先级,通常是个数字或者时间戳等,
8- 当出队的时候我们希望按照给定的优先级出队,我们按照 TDD 的方式先来写测试代码:
8+ 当出队的时候我们希望按照给定的优先级出队,我们按照 TDD(测试驱动开发) 的方式先来写测试代码:
99
1010``` py
1111def test_priority_queue ():
Original file line number Diff line number Diff line change 77# BST 定义
88
99二叉查找树是这样一种二叉树结构,它的每个节点包含一个 key 和它附带的数据,对于每个内部节点 V:
10+
1011- 所有 key 小于 V 的都被存储在 V 的左子树
1112- 所有 key 大于 V 的都存储在 V 的右子树
1213
@@ -164,7 +165,7 @@ bst = BST.build_from(NODE_LIST)
164165![ ] ( ./bst_remove_leaf.png )
165166
166167#### 删除只有一个孩子的节点
167- 删除有一个孩子的节点时,我们拿掉需要删除的节点,之后把它的父亲指向它的孩子就行,以为根据 BST
168+ 删除有一个孩子的节点时,我们拿掉需要删除的节点,之后把它的父亲指向它的孩子就行,因为根据 BST
168169左子树都小于节点,右子树都大于节点的特性,删除它之后这个条件依旧满足。
169170
170171![ ] ( ./bst_remove_node_with_one_child.png )
@@ -176,7 +177,7 @@ bst = BST.build_from(NODE_LIST)
176177
177178但是这种方式可能会影响树的高度,降低查找的效率。这里我们用另一种非常巧妙的方式。
178179还记得上边提到的吗,如果你中序遍历 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),请看下图:
180181
181182![ ] ( ./predecessor_successor.png )
182183
@@ -222,6 +223,7 @@ bst = BST.build_from(NODE_LIST)
222223 def remove (self , key ):
223224 assert key in self
224225 self .size -= 1
226+ return self ._bst_remove(self .root, key)
225227```
226228
227229完整代码你可以在本章的 bst.py 找到。
You can’t perform that action at this time.
0 commit comments