mirror of
https://github.com/krahets/hello-algo.git
synced 2025-12-19 07:17:54 +08:00
Modify 。** to **。 for better visualization.
This commit is contained in:
@@ -253,7 +253,7 @@ G. M. Adelson-Velsky 和 E. M. Landis 在其 1962 年发表的论文 "An algorit
|
||||
|
||||
## AVL 树旋转
|
||||
|
||||
AVL 树的独特之处在于「旋转 Rotation」的操作,其可 **在不影响二叉树中序遍历序列的前提下,使失衡结点重新恢复平衡。** 换言之,旋转操作既可以使树保持为「二叉搜索树」,也可以使树重新恢复为「平衡二叉树」。
|
||||
AVL 树的独特之处在于「旋转 Rotation」的操作,其可 **在不影响二叉树中序遍历序列的前提下,使失衡结点重新恢复平衡**。换言之,旋转操作既可以使树保持为「二叉搜索树」,也可以使树重新恢复为「平衡二叉树」。
|
||||
|
||||
我们将平衡因子的绝对值 $> 1$ 的结点称为「失衡结点」。根据结点的失衡情况,旋转操作分为 **右旋、左旋、先右旋后左旋、先左旋后右旋**,接下来我们来一起来看看它们是如何操作的。
|
||||
|
||||
|
||||
@@ -430,15 +430,15 @@ comments: true
|
||||
|
||||
与插入结点一样,我们需要在删除操作后维持二叉搜索树的“左子树 < 根结点 < 右子树”的性质。首先,我们需要在二叉树中执行查找操作,获取待删除结点。接下来,根据待删除结点的子结点数量,删除操作需要分为三种情况:
|
||||
|
||||
**待删除结点的子结点数量 $= 0$ 。** 表明待删除结点是叶结点,直接删除即可。
|
||||
**待删除结点的子结点数量 $= 0$ **。表明待删除结点是叶结点,直接删除即可。
|
||||
|
||||

|
||||
|
||||
**待删除结点的子结点数量 $= 1$ 。** 将待删除结点替换为其子结点。
|
||||
**待删除结点的子结点数量 $= 1$ **。将待删除结点替换为其子结点。
|
||||
|
||||

|
||||
|
||||
**待删除结点的子结点数量 $= 2$ 。** 删除操作分为三步:
|
||||
**待删除结点的子结点数量 $= 2$ **。删除操作分为三步:
|
||||
|
||||
1. 找到待删除结点在 **中序遍历序列** 中的下一个结点,记为 `nex` ;
|
||||
2. 在树中递归删除结点 `nex` ;
|
||||
|
||||
@@ -137,7 +137,7 @@ comments: true
|
||||
|
||||
## 二叉树基本操作
|
||||
|
||||
**初始化二叉树。** 与链表类似,先初始化结点,再构建引用指向(即指针)。
|
||||
**初始化二叉树**。与链表类似,先初始化结点,再构建引用指向(即指针)。
|
||||
|
||||
=== "Java"
|
||||
|
||||
@@ -263,7 +263,7 @@ comments: true
|
||||
n2.right = n5;
|
||||
```
|
||||
|
||||
**插入与删除结点。** 与链表类似,插入与删除结点都可以通过修改指针实现。
|
||||
**插入与删除结点**。与链表类似,插入与删除结点都可以通过修改指针实现。
|
||||
|
||||

|
||||
|
||||
@@ -497,7 +497,7 @@ comments: true
|
||||
|
||||

|
||||
|
||||
回顾「完全二叉树」的满足条件,其只有最底层有空结点,并且最底层的结点尽量靠左,因而所有空结点都一定出现在层序遍历序列的末尾。**因为我们先验地确定了空位的位置,所以在使用数组表示完全二叉树时,可以省略存储“空位”**。“便于使用数组表示”也是完全二叉树受欢迎的原因之一。
|
||||
回顾「完全二叉树」的定义,其只有最底层有空结点,并且最底层的结点尽量靠左,因而所有空结点都一定出现在层序遍历序列的末尾。**因为我们先验地确定了空位的位置,所以在使用数组表示完全二叉树时,可以省略存储“空位”**。因此,完全二叉树非常适合使用数组来表示。
|
||||
|
||||

|
||||
|
||||
|
||||
Reference in New Issue
Block a user