This commit is contained in:
krahets
2023-08-19 19:21:18 +08:00
parent 97c532b228
commit 71c7786f51
22 changed files with 49 additions and 8 deletions

View File

@@ -1095,15 +1095,16 @@ AVL 树的特点在于「旋转 Rotation」操作它能够在不影响二叉
<p align="center"> 图AVL 树的四种旋转情况 </p>
在代码中,我们通过判断失衡节点的平衡因子以及较高一侧子节点的平衡因子的正负号,来确定失衡节点属于上图中的哪种情况。
<p align="center"> 表:四种旋转情况的选择条件 </p>
<div class="center-table" markdown>
| 失衡节点的平衡因子 | 子节点的平衡因子 | 应采用的旋转方法 |
| ---------------- | ---------------- | ---------------- |
| $>1$ (即左偏树) | $\geq 0$ | 右旋 |
| $>1$ (即左偏树) | $<0$ | 先左旋后右旋 |
| $<-1$ (即右偏树) | $\leq 0$ | 左旋 |
| $<-1$ (即右偏树) | $>0$ | 先右旋后左旋 |
| $> 1$ (即左偏树) | $\geq 0$ | 右旋 |
| $> 1$ (即左偏树) | $<0$ | 先左旋后右旋 |
| $< -1$ (即右偏树) | $\leq 0$ | 左旋 |
| $< -1$ (即右偏树) | $>0$ | 先右旋后左旋 |
</div>

View File

@@ -1489,6 +1489,7 @@ comments: true
给定一组数据,我们考虑使用数组或二叉搜索树存储。
观察可知,二叉搜索树的各项操作的时间复杂度都是对数阶,具有稳定且高效的性能表现。只有在高频添加、低频查找删除的数据适用场景下,数组比二叉搜索树的效率更高。
<p align="center"> 表:数组与搜索树的效率对比 </p>
<div class="center-table" markdown>

View File

@@ -568,14 +568,15 @@ comments: true
<p align="center"> 图:二叉树的最佳与最差结构 </p>
如下表所示,在最佳和最差结构下,二叉树的叶节点数量、节点总数、高度等达到极大或极小值。
<p align="center"> 表:二叉树的最佳与最差情况 </p>
<div class="center-table" markdown>
| | 完美二叉树 | 链表 |
| ----------------------------- | ---------- | ---------- |
| 第 $i$ 层的节点数量 | $2^{i-1}$ | $1$ |
| 树的高度 $h$ 的叶节点数量 | $2^h$ | $1$ |
| 树的高度 $h$ 的节点总数 | $2^{h+1} - 1$ | $h + 1$ |
| 树的节点总数 $n$ 的高度 | $\log_2 (n+1) - 1$ | $n - 1$ |
| 高度 $h$ 的叶节点数量 | $2^h$ | $1$ |
| 高度 $h$ 的节点总数 | $2^{h+1} - 1$ | $h + 1$ |
| 节点总数 $n$ 的高度 | $\log_2 (n+1) - 1$ | $n - 1$ |
</div>

View File

@@ -50,3 +50,7 @@ comments: true
- `equals()`:用来对比两个对象的值是否相等。
因此如果要对比值,我们通常会用 `equals()` 。然而,通过 `String a = "hi"; String b = "hi";` 初始化的字符串都存储在字符串常量池中,它们指向同一个对象,因此也可以用 `a == b` 来比较两个字符串的内容。
!!! question "广度优先遍历到最底层之前,队列中的节点数量是 $2^h$ 吗?"
是的,例如高度 $h = 2$ 的满二叉树,其节点总数 $n = 7$ ,则底层节点数量 $4 = 2^h = (n + 1) / 2$ 。