Add Zig code blocks.

This commit is contained in:
Yudong Jin
2023-02-01 22:03:04 +08:00
parent 6cd6d5589e
commit 7ce7386bab
25 changed files with 599 additions and 0 deletions
+48
View File
@@ -117,6 +117,12 @@ G. M. Adelson-Velsky 和 E. M. Landis 在其 1962 年发表的论文 "An algorit
}
```
=== "Zig"
```zig title="avl_tree.zig"
```
「结点高度」是最远叶结点到该结点的距离,即走过的「边」的数量。需要特别注意,**叶结点的高度为 0 ,空结点的高度为 -1**。我们封装两个工具函数,分别用于获取与更新结点的高度。
=== "Java"
@@ -234,6 +240,12 @@ G. M. Adelson-Velsky 和 E. M. Landis 在其 1962 年发表的论文 "An algorit
}
```
=== "Zig"
```zig title="avl_tree.zig"
```
### 结点平衡因子
结点的「平衡因子 Balance Factor」是 **结点的左子树高度减去右子树高度**,并定义空结点的平衡因子为 0 。同样地,我们将获取结点平衡因子封装成函数,以便后续使用。
@@ -325,6 +337,12 @@ G. M. Adelson-Velsky 和 E. M. Landis 在其 1962 年发表的论文 "An algorit
}
```
=== "Zig"
```zig title="avl_tree.zig"
```
!!! note
设平衡因子为 $f$ ,则一棵 AVL 树的任意结点的平衡因子皆满足 $-1 \le f \le 1$ 。
@@ -469,6 +487,12 @@ AVL 树的独特之处在于「旋转 Rotation」的操作,其可 **在不影
}
```
=== "Zig"
```zig title="avl_tree.zig"
```
### Case 2 - 左旋
类似地,如果将取上述失衡二叉树的“镜像”,那么则需要「左旋」操作。
@@ -595,6 +619,12 @@ AVL 树的独特之处在于「旋转 Rotation」的操作,其可 **在不影
}
```
=== "Zig"
```zig title="avl_tree.zig"
```
### Case 3 - 先左后右
对于下图的失衡结点 3 ,**单一使用左旋或右旋都无法使子树恢复平衡**,此时需要「先左旋后右旋」,即先对 `child` 执行「左旋」,再对 `node` 执行「右旋」。
@@ -827,6 +857,12 @@ AVL 树的独特之处在于「旋转 Rotation」的操作,其可 **在不影
}
```
=== "Zig"
```zig title="avl_tree.zig"
```
## 7.4.3. AVL 树常用操作
### 插入结点
@@ -1002,6 +1038,12 @@ AVL 树的独特之处在于「旋转 Rotation」的操作,其可 **在不影
}
```
=== "Zig"
```zig title="avl_tree.zig"
```
### 删除结点
「AVL 树」删除结点操作与「二叉搜索树」删除结点操作总体相同。类似地,**在删除结点后,也需要从底至顶地执行旋转操作,使所有失衡结点恢复平衡**。
@@ -1249,6 +1291,12 @@ AVL 树的独特之处在于「旋转 Rotation」的操作,其可 **在不影
}
```
=== "Zig"
```zig title="avl_tree.zig"
```
### 查找结点
「AVL 树」的结点查找操作与「二叉搜索树」一致,在此不再赘述。