mirror of
https://github.com/krahets/hello-algo.git
synced 2026-08-12 03:40:58 +00:00
Add Zig code blocks.
This commit is contained in:
@@ -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 树」的结点查找操作与「二叉搜索树」一致,在此不再赘述。
|
||||
|
||||
Reference in New Issue
Block a user