Bug fixes and improvements (#1152)

* Update avl_tree.md

* Remove the empty space

* Simplify the heading of the paperbook chapter

* Update hash_map_open_addressing.go to the latest version

* Improvements
This commit is contained in:
Yudong Jin
2024-03-18 13:34:02 +08:00
committed by GitHub
parent 6f1ec66949
commit 7f43f92ae9
15 changed files with 84 additions and 107 deletions

View File

@ -31,11 +31,11 @@
# 元素内存地址 = 数组内存地址(首元素内存地址) + 元素长度 * 元素索引
```
**Q**:删除节点后,是否需要把 `P.next` 设为 `None` 呢?
**Q**:删除节点 `P` 后,是否需要把 `P.next` 设为 `None` 呢?
不修改 `P.next` 也可以。从该链表的角度看,从头节点遍历到尾节点已经不会遇到 `P` 了。这意味着节点 `P` 已经从链表中删除了,此时节点 `P` 指向哪里都不会对该链表产生影响。
垃圾回收的角度看,对于 Java、Python、Go 等拥有自动垃圾回收机制的语言来说,节点 `P` 是否被回收取决于是否仍存在指向它的引用,而不是 `P.next` 的值。在 C 和 C++ 等语言中,我们需要手动释放节点内存。
数据结构与算法(做题)的角度看,不断开没有关系,只要保证程序的逻辑是正确的就行。从标准库的角度看,断开更加安全、逻辑更加清晰。如果不断开,假设被删除节点未被正常回收,那么它会影响后继节点内存回收
**Q**:在链表中插入和删除操作的时间复杂度是 $O(1)$ 。但是增删之前都需要 $O(n)$ 的时间查找元素,那为什么时间复杂度不是 $O(n)$ 呢?
@ -74,7 +74,3 @@
**Q**:初始化列表 `res = [0] * self.size()` 操作,会导致 `res` 的每个元素引用相同的地址吗?
不会。但二维数组会有这个问题,例如初始化二维列表 `res = [[0] * self.size()]` ,则多次引用了同一个列表 `[0]`
**Q**:在删除节点中,需要断开该节点与其后继节点之间的引用指向吗?
从数据结构与算法(做题)的角度看,不断开没有关系,只要保证程序的逻辑是正确的就行。从标准库的角度看,断开更加安全、逻辑更加清晰。如果不断开,假设被删除节点未被正常回收,那么它会影响后继节点的内存回收。

View File

@ -4,7 +4,7 @@ icon: fontawesome/solid/book
status: new
---
# 纸质书介绍
# 纸质书
经过长时间的打磨《Hello 算法》纸质书终于发布了!此时的心情可以用一句诗来形容:

View File

@ -12,7 +12,7 @@
![完美二叉树的数组表示](array_representation_of_tree.assets/array_representation_binary_tree.png)
**映射公式的角色相当于链表中的指针**。给定数组中的任意一个节点,我们都可以通过映射公式来访问它的左(右)子节点。
**映射公式的角色相当于链表中的引用**。给定数组中的任意一个节点,我们都可以通过映射公式来访问它的左(右)子节点。
## 表示任意二叉树

View File

@ -333,4 +333,4 @@ AVL 树的节点查找操作与二叉搜索树一致,在此不再赘述。
- 组织和存储大型数据,适用于高频查找、低频增删的场景。
- 用于构建数据库中的索引系统。
- 红黑树也是一种常见的平衡二叉搜索树。相较于 AVL 树,红黑树的平衡条件相对宽松,插入与删除节点所需的旋转操作相对较少,节点增删操作的平均效率更高。
- 红黑树也是一种常见的平衡二叉搜索树。相较于 AVL 树,红黑树的平衡条件宽松,插入与删除节点所需的旋转操作少,节点增删操作的平均效率更高。