Remove center-table from docs.

Add header to the tables.
This commit is contained in:
krahets
2023-08-19 19:22:08 +08:00
parent 4eb621dda7
commit 70227c82cb
18 changed files with 26 additions and 78 deletions
+5 -8
View File
@@ -569,17 +569,14 @@ AVL 树的特点在于「旋转 Rotation」操作,它能够在不影响二叉
![AVL 树的四种旋转情况](avl_tree.assets/avltree_rotation_cases.png)
在代码中,我们通过判断失衡节点的平衡因子以及较高一侧子节点的平衡因子的正负号,来确定失衡节点属于上图中的哪种情况。
<div class="center-table" markdown>
<p align="center"> 表:四种旋转情况的选择条件 </p>
| 失衡节点的平衡因子 | 子节点的平衡因子 | 应采用的旋转方法 |
| ---------------- | ---------------- | ---------------- |
| $>1$ (即左偏树) | $\geq 0$ | 右旋 |
| $>1$ (即左偏树) | $<0$ | 先左旋后右旋 |
| $<-1$ (即右偏树) | $\leq 0$ | 左旋 |
| $<-1$ (即右偏树) | $>0$ | 先右旋后左旋 |
</div>
| $> 1$ (即左偏树) | $\geq 0$ | 右旋 |
| $> 1$ (即左偏树) | $<0$ | 先左旋后右旋 |
| $< -1$ (即右偏树) | $\leq 0$ | 左旋 |
| $< -1$ (即右偏树) | $>0$ | 先右旋后左旋 |
为了便于使用,我们将旋转操作封装成一个函数。**有了这个函数,我们就能对各种失衡情况进行旋转,使失衡节点重新恢复平衡**。
+1 -4
View File
@@ -310,8 +310,7 @@
给定一组数据,我们考虑使用数组或二叉搜索树存储。
观察可知,二叉搜索树的各项操作的时间复杂度都是对数阶,具有稳定且高效的性能表现。只有在高频添加、低频查找删除的数据适用场景下,数组比二叉搜索树的效率更高。
<div class="center-table" markdown>
<p align="center"> 表:数组与搜索树的效率对比 </p>
| | 无序数组 | 二叉搜索树 |
| -------- | -------- | ----------- |
@@ -319,8 +318,6 @@
| 插入元素 | $O(1)$ | $O(\log n)$ |
| 删除元素 | $O(n)$ | $O(\log n)$ |
</div>
在理想情况下,二叉搜索树是“平衡”的,这样就可以在 $\log n$ 轮循环内查找任意节点。
然而,如果我们在二叉搜索树中不断地插入和删除节点,可能导致二叉树退化为链表,这时各种操作的时间复杂度也会退化为 $O(n)$ 。
+4 -7
View File
@@ -548,14 +548,11 @@
![二叉树的最佳与最差结构](binary_tree.assets/binary_tree_best_worst_cases.png)
如下表所示,在最佳和最差结构下,二叉树的叶节点数量、节点总数、高度等达到极大或极小值。
<div class="center-table" markdown>
<p align="center"> 表:二叉树的最佳与最差情况 </p>
| | 完美二叉树 | 链表 |
| ----------------------------- | ---------- | ---------- |
| 第 $i$ 层的节点数量 | $2^{i-1}$ | $1$ |
| 树的高度 $h$ 的叶节点数量 | $2^h$ | $1$ |
| 树的高度 $h$ 的节点总数 | $2^{h+1} - 1$ | $h + 1$ |
| 树的节点总数 $n$ 的高度 | $\log_2 (n+1) - 1$ | $n - 1$ |
</div>
| 高度 $h$ 的叶节点数量 | $2^h$ | $1$ |
| 高度 $h$ 的节点总数 | $2^{h+1} - 1$ | $h + 1$ |
| 节点总数 $n$ 的高度 | $\log_2 (n+1) - 1$ | $n - 1$ |