mirror of
https://github.com/krahets/hello-algo.git
synced 2026-04-05 03:30:30 +08:00
Remove the spaces between “ ” and 中文 aside.
This commit is contained in:
@@ -164,7 +164,7 @@ comments: true
|
||||
|
||||
### 插入结点
|
||||
|
||||
给定一个待插入元素 `num` ,为了保持二叉搜索树 “左子树 < 根结点 < 右子树” 的性质,插入操作分为两步:
|
||||
给定一个待插入元素 `num` ,为了保持二叉搜索树“左子树 < 根结点 < 右子树”的性质,插入操作分为两步:
|
||||
|
||||
1. **查找插入位置:** 与查找操作类似,我们从根结点出发,根据当前结点值和 `num` 的大小关系循环向下搜索,直到越过叶结点(遍历到 $\text{null}$ )时跳出循环;
|
||||
2. **在该位置插入结点:** 初始化结点 `num` ,将该结点放到 $\text{null}$ 的位置 ;
|
||||
@@ -344,7 +344,7 @@ comments: true
|
||||
|
||||
### 删除结点
|
||||
|
||||
与插入结点一样,我们需要在删除操作后维持二叉搜索树的 “左子树 < 根结点 < 右子树” 的性质。首先,我们需要在二叉树中执行查找操作,获取待删除结点。接下来,根据待删除结点的子结点数量,删除操作需要分为三种情况:
|
||||
与插入结点一样,我们需要在删除操作后维持二叉搜索树的“左子树 < 根结点 < 右子树”的性质。首先,我们需要在二叉树中执行查找操作,获取待删除结点。接下来,根据待删除结点的子结点数量,删除操作需要分为三种情况:
|
||||
|
||||
**待删除结点的子结点数量 $= 0$ 。** 表明待删除结点是叶结点,直接删除即可。
|
||||
|
||||
@@ -668,7 +668,7 @@ comments: true
|
||||
- **删除元素:** 与无序数组中的情况相同,使用 $O(n)$ 时间;
|
||||
- **获取最小 / 最大元素:** 数组头部和尾部元素即是最小和最大元素,使用 $O(1)$ 时间;
|
||||
|
||||
观察发现,无序数组和有序数组中的各类操作的时间复杂度是 “偏科” 的,即有的快有的慢;**而二叉搜索树的各项操作的时间复杂度都是对数阶,在数据量 $n$ 很大时有巨大优势**。
|
||||
观察发现,无序数组和有序数组中的各项操作的时间复杂度是“偏科”的,即有的快有的慢;**而二叉搜索树的各项操作的时间复杂度都是对数阶,在数据量 $n$ 很大时有巨大优势**。
|
||||
|
||||
<div class="center-table" markdown>
|
||||
|
||||
@@ -683,7 +683,7 @@ comments: true
|
||||
|
||||
## 二叉搜索树的退化
|
||||
|
||||
理想情况下,我们希望二叉搜索树的是 “左右平衡” 的(详见「平衡二叉树」章节),此时可以在 $\log n$ 轮循环内查找任意结点。
|
||||
理想情况下,我们希望二叉搜索树的是“左右平衡”的(详见「平衡二叉树」章节),此时可以在 $\log n$ 轮循环内查找任意结点。
|
||||
|
||||
如果我们动态地在二叉搜索树中插入与删除结点,**则可能导致二叉树退化为链表**,此时各种操作的时间复杂度也退化之 $O(n)$ 。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user