This commit is contained in:
krahets
2023-02-24 18:46:22 +08:00
parent 0edd696eb7
commit 700da13226
50 changed files with 3964 additions and 3964 deletions
+94 -94
View File
@@ -25,7 +25,7 @@
<title>7.4. AVL 树 * - Hello 算法</title>
<title>7.4.   AVL 树 * - Hello 算法</title>
@@ -111,7 +111,7 @@
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
7.4. AVL 树 *
7.4. &nbsp; AVL 树 *
</span>
</div>
@@ -268,14 +268,14 @@
<label class="md-nav__link" for="__nav_1" id="__nav_1_label" tabindex="0">
0. 写在前面
0. &nbsp; &nbsp; 写在前面
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_1">
<span class="md-nav__icon md-icon"></span>
0. 写在前面
0. &nbsp; &nbsp; 写在前面
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -286,7 +286,7 @@
<li class="md-nav__item">
<a href="../../chapter_preface/about_the_book/" class="md-nav__link">
0.1. 关于本书
0.1. &nbsp; 关于本书
</a>
</li>
@@ -300,7 +300,7 @@
<li class="md-nav__item">
<a href="../../chapter_preface/suggestions/" class="md-nav__link">
0.2. 如何使用本书
0.2. &nbsp; 如何使用本书
</a>
</li>
@@ -314,7 +314,7 @@
<li class="md-nav__item">
<a href="../../chapter_preface/installation/" class="md-nav__link">
0.3. 编程环境安装
0.3. &nbsp; 编程环境安装
</a>
</li>
@@ -328,7 +328,7 @@
<li class="md-nav__item">
<a href="../../chapter_preface/contribution/" class="md-nav__link">
0.4. 一起参与创作
0.4. &nbsp; 一起参与创作
</a>
</li>
@@ -367,14 +367,14 @@
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
1. 引言
1. &nbsp; &nbsp; 引言
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
1. 引言
1. &nbsp; &nbsp; 引言
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -385,7 +385,7 @@
<li class="md-nav__item">
<a href="../../chapter_introduction/algorithms_are_everywhere/" class="md-nav__link">
1.1. 算法无处不在
1.1. &nbsp; 算法无处不在
</a>
</li>
@@ -399,7 +399,7 @@
<li class="md-nav__item">
<a href="../../chapter_introduction/what_is_dsa/" class="md-nav__link">
1.2. 算法是什么
1.2. &nbsp; 算法是什么
</a>
</li>
@@ -444,14 +444,14 @@
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
2. 计算复杂度
2. &nbsp; &nbsp; 计算复杂度
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
2. 计算复杂度
2. &nbsp; &nbsp; 计算复杂度
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -462,7 +462,7 @@
<li class="md-nav__item">
<a href="../../chapter_computational_complexity/performance_evaluation/" class="md-nav__link">
2.1. 算法效率评估
2.1. &nbsp; 算法效率评估
</a>
</li>
@@ -476,7 +476,7 @@
<li class="md-nav__item">
<a href="../../chapter_computational_complexity/time_complexity/" class="md-nav__link">
2.2. 时间复杂度
2.2. &nbsp; 时间复杂度
</a>
</li>
@@ -490,7 +490,7 @@
<li class="md-nav__item">
<a href="../../chapter_computational_complexity/space_complexity/" class="md-nav__link">
2.3. 空间复杂度
2.3. &nbsp; 空间复杂度
</a>
</li>
@@ -504,7 +504,7 @@
<li class="md-nav__item">
<a href="../../chapter_computational_complexity/space_time_tradeoff/" class="md-nav__link">
2.4. 权衡时间与空间
2.4. &nbsp; 权衡时间与空间
</a>
</li>
@@ -518,7 +518,7 @@
<li class="md-nav__item">
<a href="../../chapter_computational_complexity/summary/" class="md-nav__link">
2.5. 小结
2.5. &nbsp; 小结
</a>
</li>
@@ -559,14 +559,14 @@
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
3. 数据结构简介
3. &nbsp; &nbsp; 数据结构简介
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
3. 数据结构简介
3. &nbsp; &nbsp; 数据结构简介
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -577,7 +577,7 @@
<li class="md-nav__item">
<a href="../../chapter_data_structure/data_and_memory/" class="md-nav__link">
3.1. 数据与内存
3.1. &nbsp; 数据与内存
</a>
</li>
@@ -591,7 +591,7 @@
<li class="md-nav__item">
<a href="../../chapter_data_structure/classification_of_data_structure/" class="md-nav__link">
3.2. 数据结构分类
3.2. &nbsp; 数据结构分类
</a>
</li>
@@ -605,7 +605,7 @@
<li class="md-nav__item">
<a href="../../chapter_data_structure/summary/" class="md-nav__link">
3.3. 小结
3.3. &nbsp; 小结
</a>
</li>
@@ -648,14 +648,14 @@
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
4. 数组与链表
4. &nbsp; &nbsp; 数组与链表
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
4. 数组与链表
4. &nbsp; &nbsp; 数组与链表
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -666,7 +666,7 @@
<li class="md-nav__item">
<a href="../../chapter_array_and_linkedlist/array/" class="md-nav__link">
4.1. 数组(Array
4.1. &nbsp; 数组(Array
</a>
</li>
@@ -680,7 +680,7 @@
<li class="md-nav__item">
<a href="../../chapter_array_and_linkedlist/linked_list/" class="md-nav__link">
4.2. 链表(LinkedList
4.2. &nbsp; 链表(LinkedList
</a>
</li>
@@ -694,7 +694,7 @@
<li class="md-nav__item">
<a href="../../chapter_array_and_linkedlist/list/" class="md-nav__link">
4.3. 列表(List
4.3. &nbsp; 列表(List
</a>
</li>
@@ -708,7 +708,7 @@
<li class="md-nav__item">
<a href="../../chapter_array_and_linkedlist/summary/" class="md-nav__link">
4.4. 小结
4.4. &nbsp; 小结
</a>
</li>
@@ -751,14 +751,14 @@
<label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
5. 栈与队列
5. &nbsp; &nbsp; 栈与队列
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
5. 栈与队列
5. &nbsp; &nbsp; 栈与队列
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -769,7 +769,7 @@
<li class="md-nav__item">
<a href="../../chapter_stack_and_queue/stack/" class="md-nav__link">
5.1. 栈(Stack
5.1. &nbsp; 栈(Stack
</a>
</li>
@@ -783,7 +783,7 @@
<li class="md-nav__item">
<a href="../../chapter_stack_and_queue/queue/" class="md-nav__link">
5.2. 队列(Queue
5.2. &nbsp; 队列(Queue
</a>
</li>
@@ -797,7 +797,7 @@
<li class="md-nav__item">
<a href="../../chapter_stack_and_queue/deque/" class="md-nav__link">
5.3. 双向队列(Deque
5.3. &nbsp; 双向队列(Deque
</a>
</li>
@@ -811,7 +811,7 @@
<li class="md-nav__item">
<a href="../../chapter_stack_and_queue/summary/" class="md-nav__link">
5.4. 小结
5.4. &nbsp; 小结
</a>
</li>
@@ -852,14 +852,14 @@
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
6. 散列表
6. &nbsp; &nbsp; 散列表
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
6. 散列表
6. &nbsp; &nbsp; 散列表
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -870,7 +870,7 @@
<li class="md-nav__item">
<a href="../../chapter_hashing/hash_map/" class="md-nav__link">
6.1. 哈希表(HashMap
6.1. &nbsp; 哈希表(HashMap
</a>
</li>
@@ -884,7 +884,7 @@
<li class="md-nav__item">
<a href="../../chapter_hashing/hash_collision/" class="md-nav__link">
6.2. 哈希冲突处理
6.2. &nbsp; 哈希冲突处理
</a>
</li>
@@ -898,7 +898,7 @@
<li class="md-nav__item">
<a href="../../chapter_hashing/summary/" class="md-nav__link">
6.3. 小结
6.3. &nbsp; 小结
</a>
</li>
@@ -945,14 +945,14 @@
<label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="0">
7. 二叉树
7. &nbsp; &nbsp; 二叉树
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_8_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_8">
<span class="md-nav__icon md-icon"></span>
7. 二叉树
7. &nbsp; &nbsp; 二叉树
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -963,7 +963,7 @@
<li class="md-nav__item">
<a href="../binary_tree/" class="md-nav__link">
7.1. 二叉树(Binary Tree
7.1. &nbsp; 二叉树(Binary Tree
</a>
</li>
@@ -977,7 +977,7 @@
<li class="md-nav__item">
<a href="../binary_tree_traversal/" class="md-nav__link">
7.2. 二叉树遍历
7.2. &nbsp; 二叉树遍历
</a>
</li>
@@ -991,7 +991,7 @@
<li class="md-nav__item">
<a href="../binary_search_tree/" class="md-nav__link">
7.3. 二叉搜索树
7.3. &nbsp; 二叉搜索树
</a>
</li>
@@ -1014,12 +1014,12 @@
<label class="md-nav__link md-nav__link--active" for="__toc">
7.4. AVL 树 *
7.4. &nbsp; AVL 树 *
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
7.4. AVL 树 *
7.4. &nbsp; AVL 树 *
</a>
@@ -1039,10 +1039,10 @@
<li class="md-nav__item">
<a href="#741-avl" class="md-nav__link">
7.4.1. AVL 树常见术语
7.4.1. &nbsp; AVL 树常见术语
</a>
<nav class="md-nav" aria-label="7.4.1. AVL 树常见术语">
<nav class="md-nav" aria-label="7.4.1. &nbsp; AVL 树常见术语">
<ul class="md-nav__list">
<li class="md-nav__item">
@@ -1066,10 +1066,10 @@
<li class="md-nav__item">
<a href="#742-avl" class="md-nav__link">
7.4.2. AVL 树旋转
7.4.2. &nbsp; AVL 树旋转
</a>
<nav class="md-nav" aria-label="7.4.2. AVL 树旋转">
<nav class="md-nav" aria-label="7.4.2. &nbsp; AVL 树旋转">
<ul class="md-nav__list">
<li class="md-nav__item">
@@ -1114,10 +1114,10 @@
<li class="md-nav__item">
<a href="#743-avl" class="md-nav__link">
7.4.3. AVL 树常用操作
7.4.3. &nbsp; AVL 树常用操作
</a>
<nav class="md-nav" aria-label="7.4.3. AVL 树常用操作">
<nav class="md-nav" aria-label="7.4.3. &nbsp; AVL 树常用操作">
<ul class="md-nav__list">
<li class="md-nav__item">
@@ -1148,7 +1148,7 @@
<li class="md-nav__item">
<a href="#744-avl" class="md-nav__link">
7.4.4. AVL 树典型应用
7.4.4. &nbsp; AVL 树典型应用
</a>
</li>
@@ -1169,7 +1169,7 @@
<li class="md-nav__item">
<a href="../summary/" class="md-nav__link">
7.5. 小结
7.5. &nbsp; 小结
</a>
</li>
@@ -1206,14 +1206,14 @@
<label class="md-nav__link" for="__nav_9" id="__nav_9_label" tabindex="0">
8. 堆
8. &nbsp; &nbsp;
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_9_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_9">
<span class="md-nav__icon md-icon"></span>
8. 堆
8. &nbsp; &nbsp;
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -1224,7 +1224,7 @@
<li class="md-nav__item">
<a href="../../chapter_heap/heap/" class="md-nav__link">
8.1. 堆(Heap
8.1. &nbsp; 堆(Heap
</a>
</li>
@@ -1265,14 +1265,14 @@
<label class="md-nav__link" for="__nav_10" id="__nav_10_label" tabindex="0">
9. 图
9. &nbsp; &nbsp;
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_10_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_10">
<span class="md-nav__icon md-icon"></span>
9. 图
9. &nbsp; &nbsp;
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -1283,7 +1283,7 @@
<li class="md-nav__item">
<a href="../../chapter_graph/graph/" class="md-nav__link">
9.1. 图(Graph
9.1. &nbsp; 图(Graph
</a>
</li>
@@ -1297,7 +1297,7 @@
<li class="md-nav__item">
<a href="../../chapter_graph/graph_operations/" class="md-nav__link">
9.2. 图基础操作
9.2. &nbsp; 图基础操作
</a>
</li>
@@ -1311,7 +1311,7 @@
<li class="md-nav__item">
<a href="../../chapter_graph/graph_traversal/" class="md-nav__link">
9.3. 图的遍历
9.3. &nbsp; 图的遍历
</a>
</li>
@@ -1354,14 +1354,14 @@
<label class="md-nav__link" for="__nav_11" id="__nav_11_label" tabindex="0">
10. 查找算法
10. &nbsp; &nbsp; 查找算法
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_11_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_11">
<span class="md-nav__icon md-icon"></span>
10. 查找算法
10. &nbsp; &nbsp; 查找算法
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -1372,7 +1372,7 @@
<li class="md-nav__item">
<a href="../../chapter_searching/linear_search/" class="md-nav__link">
10.1. 线性查找
10.1. &nbsp; 线性查找
</a>
</li>
@@ -1386,7 +1386,7 @@
<li class="md-nav__item">
<a href="../../chapter_searching/binary_search/" class="md-nav__link">
10.2. 二分查找
10.2. &nbsp; 二分查找
</a>
</li>
@@ -1400,7 +1400,7 @@
<li class="md-nav__item">
<a href="../../chapter_searching/hashing_search/" class="md-nav__link">
10.3. 哈希查找
10.3. &nbsp; 哈希查找
</a>
</li>
@@ -1414,7 +1414,7 @@
<li class="md-nav__item">
<a href="../../chapter_searching/summary/" class="md-nav__link">
10.4. 小结
10.4. &nbsp; 小结
</a>
</li>
@@ -1461,14 +1461,14 @@
<label class="md-nav__link" for="__nav_12" id="__nav_12_label" tabindex="0">
11. 排序算法
11. &nbsp; &nbsp; 排序算法
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_12_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_12">
<span class="md-nav__icon md-icon"></span>
11. 排序算法
11. &nbsp; &nbsp; 排序算法
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -1479,7 +1479,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/intro_to_sort/" class="md-nav__link">
11.1. 排序简介
11.1. &nbsp; 排序简介
</a>
</li>
@@ -1493,7 +1493,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/bubble_sort/" class="md-nav__link">
11.2. 冒泡排序
11.2. &nbsp; 冒泡排序
</a>
</li>
@@ -1507,7 +1507,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/insertion_sort/" class="md-nav__link">
11.3. 插入排序
11.3. &nbsp; 插入排序
</a>
</li>
@@ -1521,7 +1521,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/quick_sort/" class="md-nav__link">
11.4. 快速排序
11.4. &nbsp; 快速排序
</a>
</li>
@@ -1535,7 +1535,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/merge_sort/" class="md-nav__link">
11.5. 归并排序
11.5. &nbsp; 归并排序
</a>
</li>
@@ -1549,7 +1549,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/summary/" class="md-nav__link">
11.6. 小结
11.6. &nbsp; 小结
</a>
</li>
@@ -1637,10 +1637,10 @@
<li class="md-nav__item">
<a href="#741-avl" class="md-nav__link">
7.4.1. AVL 树常见术语
7.4.1. &nbsp; AVL 树常见术语
</a>
<nav class="md-nav" aria-label="7.4.1. AVL 树常见术语">
<nav class="md-nav" aria-label="7.4.1. &nbsp; AVL 树常见术语">
<ul class="md-nav__list">
<li class="md-nav__item">
@@ -1664,10 +1664,10 @@
<li class="md-nav__item">
<a href="#742-avl" class="md-nav__link">
7.4.2. AVL 树旋转
7.4.2. &nbsp; AVL 树旋转
</a>
<nav class="md-nav" aria-label="7.4.2. AVL 树旋转">
<nav class="md-nav" aria-label="7.4.2. &nbsp; AVL 树旋转">
<ul class="md-nav__list">
<li class="md-nav__item">
@@ -1712,10 +1712,10 @@
<li class="md-nav__item">
<a href="#743-avl" class="md-nav__link">
7.4.3. AVL 树常用操作
7.4.3. &nbsp; AVL 树常用操作
</a>
<nav class="md-nav" aria-label="7.4.3. AVL 树常用操作">
<nav class="md-nav" aria-label="7.4.3. &nbsp; AVL 树常用操作">
<ul class="md-nav__list">
<li class="md-nav__item">
@@ -1746,7 +1746,7 @@
<li class="md-nav__item">
<a href="#744-avl" class="md-nav__link">
7.4.4. AVL 树典型应用
7.4.4. &nbsp; AVL 树典型应用
</a>
</li>
@@ -1775,7 +1775,7 @@
<h1 id="74-avl">7.4. AVL 树 *<a class="headerlink" href="#74-avl" title="Permanent link">&para;</a></h1>
<h1 id="74-avl">7.4. &nbsp; AVL 树 *<a class="headerlink" href="#74-avl" title="Permanent link">&para;</a></h1>
<p>在「二叉搜索树」章节中提到,在进行多次插入与删除操作后,二叉搜索树可能会退化为链表。此时所有操作的时间复杂度都会由 <span class="arithmatex">\(O(\log n)\)</span> 劣化至 <span class="arithmatex">\(O(n)\)</span></p>
<p>如下图所示,执行两步删除结点后,该二叉搜索树就会退化为链表。</p>
<p><img alt="degradation_from_removing_node" src="../avl_tree.assets/degradation_from_removing_node.png" /></p>
@@ -1783,7 +1783,7 @@
<p><img alt="degradation_from_inserting_node" src="../avl_tree.assets/degradation_from_inserting_node.png" /></p>
<p>G. M. Adelson-Velsky 和 E. M. Landis 在其 1962 年发表的论文 "An algorithm for the organization of information" 中提出了「AVL 树」。<strong>论文中描述了一系列操作,使得在不断添加与删除结点后,AVL 树仍然不会发生退化</strong>,进而使得各种操作的时间复杂度均能保持在 <span class="arithmatex">\(O(\log n)\)</span> 级别。</p>
<p>换言之,在频繁增删查改的使用场景中,AVL 树可始终保持很高的数据增删查改效率,具有很好的应用价值。</p>
<h2 id="741-avl">7.4.1. AVL 树常见术语<a class="headerlink" href="#741-avl" title="Permanent link">&para;</a></h2>
<h2 id="741-avl">7.4.1. &nbsp; AVL 树常见术语<a class="headerlink" href="#741-avl" title="Permanent link">&para;</a></h2>
<p>「AVL 树」既是「二叉搜索树」又是「平衡二叉树」,同时满足这两种二叉树的所有性质,因此又被称为「平衡二叉搜索树」。</p>
<h3 id="_1">结点高度<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h3>
<p>在 AVL 树的操作中,需要获取结点「高度 Height」,所以给 AVL 树的结点类添加 <code>height</code> 变量。</p>
@@ -2154,7 +2154,7 @@
<p class="admonition-title">Note</p>
<p>设平衡因子为 <span class="arithmatex">\(f\)</span> ,则一棵 AVL 树的任意结点的平衡因子皆满足 <span class="arithmatex">\(-1 \le f \le 1\)</span></p>
</div>
<h2 id="742-avl">7.4.2. AVL 树旋转<a class="headerlink" href="#742-avl" title="Permanent link">&para;</a></h2>
<h2 id="742-avl">7.4.2. &nbsp; AVL 树旋转<a class="headerlink" href="#742-avl" title="Permanent link">&para;</a></h2>
<p>AVL 树的独特之处在于「旋转 Rotation」的操作,其可 <strong>在不影响二叉树中序遍历序列的前提下,使失衡结点重新恢复平衡</strong>。换言之,旋转操作既可以使树保持为「二叉搜索树」,也可以使树重新恢复为「平衡二叉树」。</p>
<p>我们将平衡因子的绝对值 <span class="arithmatex">\(&gt; 1\)</span> 的结点称为「失衡结点」。根据结点的失衡情况,旋转操作分为 <strong>右旋、左旋、先右旋后左旋、先左旋后右旋</strong>,接下来我们来一起来看看它们是如何操作的。</p>
<h3 id="case-1-">Case 1 - 右旋<a class="headerlink" href="#case-1-" title="Permanent link">&para;</a></h3>
@@ -2833,7 +2833,7 @@
</div>
</div>
</div>
<h2 id="743-avl">7.4.3. AVL 树常用操作<a class="headerlink" href="#743-avl" title="Permanent link">&para;</a></h2>
<h2 id="743-avl">7.4.3. &nbsp; AVL 树常用操作<a class="headerlink" href="#743-avl" title="Permanent link">&para;</a></h2>
<h3 id="_4">插入结点<a class="headerlink" href="#_4" title="Permanent link">&para;</a></h3>
<p>「AVL 树」的结点插入操作与「二叉搜索树」主体类似。不同的是,在插入结点后,从该结点到根结点的路径上会出现一系列「失衡结点」。所以,<strong>我们需要从该结点开始,从底至顶地执行旋转操作,使所有失衡结点恢复平衡</strong></p>
<div class="tabbed-set tabbed-alternate" data-tabs="8:10"><input checked="checked" id="__tabbed_8_1" name="__tabbed_8" type="radio" /><input id="__tabbed_8_2" name="__tabbed_8" type="radio" /><input id="__tabbed_8_3" name="__tabbed_8" type="radio" /><input id="__tabbed_8_4" name="__tabbed_8" type="radio" /><input id="__tabbed_8_5" name="__tabbed_8" type="radio" /><input id="__tabbed_8_6" name="__tabbed_8" type="radio" /><input id="__tabbed_8_7" name="__tabbed_8" type="radio" /><input id="__tabbed_8_8" name="__tabbed_8" type="radio" /><input id="__tabbed_8_9" name="__tabbed_8" type="radio" /><input id="__tabbed_8_10" name="__tabbed_8" type="radio" /><div class="tabbed-labels"><label for="__tabbed_8_1">Java</label><label for="__tabbed_8_2">C++</label><label for="__tabbed_8_3">Python</label><label for="__tabbed_8_4">Go</label><label for="__tabbed_8_5">JavaScript</label><label for="__tabbed_8_6">TypeScript</label><label for="__tabbed_8_7">C</label><label for="__tabbed_8_8">C#</label><label for="__tabbed_8_9">Swift</label><label for="__tabbed_8_10">Zig</label></div>
@@ -3568,7 +3568,7 @@
</div>
<h3 id="_6">查找结点<a class="headerlink" href="#_6" title="Permanent link">&para;</a></h3>
<p>「AVL 树」的结点查找操作与「二叉搜索树」一致,在此不再赘述。</p>
<h2 id="744-avl">7.4.4. AVL 树典型应用<a class="headerlink" href="#744-avl" title="Permanent link">&para;</a></h2>
<h2 id="744-avl">7.4.4. &nbsp; AVL 树典型应用<a class="headerlink" href="#744-avl" title="Permanent link">&para;</a></h2>
<ul>
<li>组织存储大型数据,适用于高频查找、低频增删场景;</li>
<li>用于建立数据库中的索引系统;</li>
@@ -3654,7 +3654,7 @@
<nav class="md-footer__inner md-grid" aria-label="页脚" >
<a href="../binary_search_tree/" class="md-footer__link md-footer__link--prev" aria-label="上一页: 7.3. 二叉搜索树" rel="prev">
<a href="../binary_search_tree/" class="md-footer__link md-footer__link--prev" aria-label="上一页: 7.3. &amp;nbsp; 二叉搜索树" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</div>
@@ -3663,20 +3663,20 @@
<span class="md-footer__direction">
上一页
</span>
7.3. 二叉搜索树
7.3. &nbsp; 二叉搜索树
</div>
</div>
</a>
<a href="../summary/" class="md-footer__link md-footer__link--next" aria-label="下一页: 7.5. 小结" rel="next">
<a href="../summary/" class="md-footer__link md-footer__link--next" aria-label="下一页: 7.5. &amp;nbsp; 小结" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
下一页
</span>
7.5. 小结
7.5. &nbsp; 小结
</div>
</div>
<div class="md-footer__button md-icon">
+90 -90
View File
@@ -25,7 +25,7 @@
<title>7.3. 二叉搜索树 - Hello 算法</title>
<title>7.3.   二叉搜索树 - Hello 算法</title>
@@ -111,7 +111,7 @@
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
7.3. 二叉搜索树
7.3. &nbsp; 二叉搜索树
</span>
</div>
@@ -268,14 +268,14 @@
<label class="md-nav__link" for="__nav_1" id="__nav_1_label" tabindex="0">
0. 写在前面
0. &nbsp; &nbsp; 写在前面
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_1">
<span class="md-nav__icon md-icon"></span>
0. 写在前面
0. &nbsp; &nbsp; 写在前面
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -286,7 +286,7 @@
<li class="md-nav__item">
<a href="../../chapter_preface/about_the_book/" class="md-nav__link">
0.1. 关于本书
0.1. &nbsp; 关于本书
</a>
</li>
@@ -300,7 +300,7 @@
<li class="md-nav__item">
<a href="../../chapter_preface/suggestions/" class="md-nav__link">
0.2. 如何使用本书
0.2. &nbsp; 如何使用本书
</a>
</li>
@@ -314,7 +314,7 @@
<li class="md-nav__item">
<a href="../../chapter_preface/installation/" class="md-nav__link">
0.3. 编程环境安装
0.3. &nbsp; 编程环境安装
</a>
</li>
@@ -328,7 +328,7 @@
<li class="md-nav__item">
<a href="../../chapter_preface/contribution/" class="md-nav__link">
0.4. 一起参与创作
0.4. &nbsp; 一起参与创作
</a>
</li>
@@ -367,14 +367,14 @@
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
1. 引言
1. &nbsp; &nbsp; 引言
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
1. 引言
1. &nbsp; &nbsp; 引言
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -385,7 +385,7 @@
<li class="md-nav__item">
<a href="../../chapter_introduction/algorithms_are_everywhere/" class="md-nav__link">
1.1. 算法无处不在
1.1. &nbsp; 算法无处不在
</a>
</li>
@@ -399,7 +399,7 @@
<li class="md-nav__item">
<a href="../../chapter_introduction/what_is_dsa/" class="md-nav__link">
1.2. 算法是什么
1.2. &nbsp; 算法是什么
</a>
</li>
@@ -444,14 +444,14 @@
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
2. 计算复杂度
2. &nbsp; &nbsp; 计算复杂度
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
2. 计算复杂度
2. &nbsp; &nbsp; 计算复杂度
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -462,7 +462,7 @@
<li class="md-nav__item">
<a href="../../chapter_computational_complexity/performance_evaluation/" class="md-nav__link">
2.1. 算法效率评估
2.1. &nbsp; 算法效率评估
</a>
</li>
@@ -476,7 +476,7 @@
<li class="md-nav__item">
<a href="../../chapter_computational_complexity/time_complexity/" class="md-nav__link">
2.2. 时间复杂度
2.2. &nbsp; 时间复杂度
</a>
</li>
@@ -490,7 +490,7 @@
<li class="md-nav__item">
<a href="../../chapter_computational_complexity/space_complexity/" class="md-nav__link">
2.3. 空间复杂度
2.3. &nbsp; 空间复杂度
</a>
</li>
@@ -504,7 +504,7 @@
<li class="md-nav__item">
<a href="../../chapter_computational_complexity/space_time_tradeoff/" class="md-nav__link">
2.4. 权衡时间与空间
2.4. &nbsp; 权衡时间与空间
</a>
</li>
@@ -518,7 +518,7 @@
<li class="md-nav__item">
<a href="../../chapter_computational_complexity/summary/" class="md-nav__link">
2.5. 小结
2.5. &nbsp; 小结
</a>
</li>
@@ -559,14 +559,14 @@
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
3. 数据结构简介
3. &nbsp; &nbsp; 数据结构简介
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
3. 数据结构简介
3. &nbsp; &nbsp; 数据结构简介
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -577,7 +577,7 @@
<li class="md-nav__item">
<a href="../../chapter_data_structure/data_and_memory/" class="md-nav__link">
3.1. 数据与内存
3.1. &nbsp; 数据与内存
</a>
</li>
@@ -591,7 +591,7 @@
<li class="md-nav__item">
<a href="../../chapter_data_structure/classification_of_data_structure/" class="md-nav__link">
3.2. 数据结构分类
3.2. &nbsp; 数据结构分类
</a>
</li>
@@ -605,7 +605,7 @@
<li class="md-nav__item">
<a href="../../chapter_data_structure/summary/" class="md-nav__link">
3.3. 小结
3.3. &nbsp; 小结
</a>
</li>
@@ -648,14 +648,14 @@
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
4. 数组与链表
4. &nbsp; &nbsp; 数组与链表
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
4. 数组与链表
4. &nbsp; &nbsp; 数组与链表
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -666,7 +666,7 @@
<li class="md-nav__item">
<a href="../../chapter_array_and_linkedlist/array/" class="md-nav__link">
4.1. 数组(Array
4.1. &nbsp; 数组(Array
</a>
</li>
@@ -680,7 +680,7 @@
<li class="md-nav__item">
<a href="../../chapter_array_and_linkedlist/linked_list/" class="md-nav__link">
4.2. 链表(LinkedList
4.2. &nbsp; 链表(LinkedList
</a>
</li>
@@ -694,7 +694,7 @@
<li class="md-nav__item">
<a href="../../chapter_array_and_linkedlist/list/" class="md-nav__link">
4.3. 列表(List
4.3. &nbsp; 列表(List
</a>
</li>
@@ -708,7 +708,7 @@
<li class="md-nav__item">
<a href="../../chapter_array_and_linkedlist/summary/" class="md-nav__link">
4.4. 小结
4.4. &nbsp; 小结
</a>
</li>
@@ -751,14 +751,14 @@
<label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
5. 栈与队列
5. &nbsp; &nbsp; 栈与队列
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
5. 栈与队列
5. &nbsp; &nbsp; 栈与队列
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -769,7 +769,7 @@
<li class="md-nav__item">
<a href="../../chapter_stack_and_queue/stack/" class="md-nav__link">
5.1. 栈(Stack
5.1. &nbsp; 栈(Stack
</a>
</li>
@@ -783,7 +783,7 @@
<li class="md-nav__item">
<a href="../../chapter_stack_and_queue/queue/" class="md-nav__link">
5.2. 队列(Queue
5.2. &nbsp; 队列(Queue
</a>
</li>
@@ -797,7 +797,7 @@
<li class="md-nav__item">
<a href="../../chapter_stack_and_queue/deque/" class="md-nav__link">
5.3. 双向队列(Deque
5.3. &nbsp; 双向队列(Deque
</a>
</li>
@@ -811,7 +811,7 @@
<li class="md-nav__item">
<a href="../../chapter_stack_and_queue/summary/" class="md-nav__link">
5.4. 小结
5.4. &nbsp; 小结
</a>
</li>
@@ -852,14 +852,14 @@
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
6. 散列表
6. &nbsp; &nbsp; 散列表
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
6. 散列表
6. &nbsp; &nbsp; 散列表
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -870,7 +870,7 @@
<li class="md-nav__item">
<a href="../../chapter_hashing/hash_map/" class="md-nav__link">
6.1. 哈希表(HashMap
6.1. &nbsp; 哈希表(HashMap
</a>
</li>
@@ -884,7 +884,7 @@
<li class="md-nav__item">
<a href="../../chapter_hashing/hash_collision/" class="md-nav__link">
6.2. 哈希冲突处理
6.2. &nbsp; 哈希冲突处理
</a>
</li>
@@ -898,7 +898,7 @@
<li class="md-nav__item">
<a href="../../chapter_hashing/summary/" class="md-nav__link">
6.3. 小结
6.3. &nbsp; 小结
</a>
</li>
@@ -945,14 +945,14 @@
<label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="0">
7. 二叉树
7. &nbsp; &nbsp; 二叉树
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_8_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_8">
<span class="md-nav__icon md-icon"></span>
7. 二叉树
7. &nbsp; &nbsp; 二叉树
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -963,7 +963,7 @@
<li class="md-nav__item">
<a href="../binary_tree/" class="md-nav__link">
7.1. 二叉树(Binary Tree
7.1. &nbsp; 二叉树(Binary Tree
</a>
</li>
@@ -977,7 +977,7 @@
<li class="md-nav__item">
<a href="../binary_tree_traversal/" class="md-nav__link">
7.2. 二叉树遍历
7.2. &nbsp; 二叉树遍历
</a>
</li>
@@ -1000,12 +1000,12 @@
<label class="md-nav__link md-nav__link--active" for="__toc">
7.3. 二叉搜索树
7.3. &nbsp; 二叉搜索树
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
7.3. 二叉搜索树
7.3. &nbsp; 二叉搜索树
</a>
@@ -1025,10 +1025,10 @@
<li class="md-nav__item">
<a href="#731" class="md-nav__link">
7.3.1. 二叉搜索树的操作
7.3.1. &nbsp; 二叉搜索树的操作
</a>
<nav class="md-nav" aria-label="7.3.1. 二叉搜索树的操作">
<nav class="md-nav" aria-label="7.3.1. &nbsp; 二叉搜索树的操作">
<ul class="md-nav__list">
<li class="md-nav__item">
@@ -1066,21 +1066,21 @@
<li class="md-nav__item">
<a href="#732" class="md-nav__link">
7.3.2. 二叉搜索树的效率
7.3.2. &nbsp; 二叉搜索树的效率
</a>
</li>
<li class="md-nav__item">
<a href="#733" class="md-nav__link">
7.3.3. 二叉搜索树的退化
7.3.3. &nbsp; 二叉搜索树的退化
</a>
</li>
<li class="md-nav__item">
<a href="#734" class="md-nav__link">
7.3.4. 二叉搜索树常见应用
7.3.4. &nbsp; 二叉搜索树常见应用
</a>
</li>
@@ -1101,7 +1101,7 @@
<li class="md-nav__item">
<a href="../avl_tree/" class="md-nav__link">
7.4. AVL 树 *
7.4. &nbsp; AVL 树 *
</a>
</li>
@@ -1115,7 +1115,7 @@
<li class="md-nav__item">
<a href="../summary/" class="md-nav__link">
7.5. 小结
7.5. &nbsp; 小结
</a>
</li>
@@ -1152,14 +1152,14 @@
<label class="md-nav__link" for="__nav_9" id="__nav_9_label" tabindex="0">
8. 堆
8. &nbsp; &nbsp;
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_9_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_9">
<span class="md-nav__icon md-icon"></span>
8. 堆
8. &nbsp; &nbsp;
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -1170,7 +1170,7 @@
<li class="md-nav__item">
<a href="../../chapter_heap/heap/" class="md-nav__link">
8.1. 堆(Heap
8.1. &nbsp; 堆(Heap
</a>
</li>
@@ -1211,14 +1211,14 @@
<label class="md-nav__link" for="__nav_10" id="__nav_10_label" tabindex="0">
9. 图
9. &nbsp; &nbsp;
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_10_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_10">
<span class="md-nav__icon md-icon"></span>
9. 图
9. &nbsp; &nbsp;
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -1229,7 +1229,7 @@
<li class="md-nav__item">
<a href="../../chapter_graph/graph/" class="md-nav__link">
9.1. 图(Graph
9.1. &nbsp; 图(Graph
</a>
</li>
@@ -1243,7 +1243,7 @@
<li class="md-nav__item">
<a href="../../chapter_graph/graph_operations/" class="md-nav__link">
9.2. 图基础操作
9.2. &nbsp; 图基础操作
</a>
</li>
@@ -1257,7 +1257,7 @@
<li class="md-nav__item">
<a href="../../chapter_graph/graph_traversal/" class="md-nav__link">
9.3. 图的遍历
9.3. &nbsp; 图的遍历
</a>
</li>
@@ -1300,14 +1300,14 @@
<label class="md-nav__link" for="__nav_11" id="__nav_11_label" tabindex="0">
10. 查找算法
10. &nbsp; &nbsp; 查找算法
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_11_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_11">
<span class="md-nav__icon md-icon"></span>
10. 查找算法
10. &nbsp; &nbsp; 查找算法
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -1318,7 +1318,7 @@
<li class="md-nav__item">
<a href="../../chapter_searching/linear_search/" class="md-nav__link">
10.1. 线性查找
10.1. &nbsp; 线性查找
</a>
</li>
@@ -1332,7 +1332,7 @@
<li class="md-nav__item">
<a href="../../chapter_searching/binary_search/" class="md-nav__link">
10.2. 二分查找
10.2. &nbsp; 二分查找
</a>
</li>
@@ -1346,7 +1346,7 @@
<li class="md-nav__item">
<a href="../../chapter_searching/hashing_search/" class="md-nav__link">
10.3. 哈希查找
10.3. &nbsp; 哈希查找
</a>
</li>
@@ -1360,7 +1360,7 @@
<li class="md-nav__item">
<a href="../../chapter_searching/summary/" class="md-nav__link">
10.4. 小结
10.4. &nbsp; 小结
</a>
</li>
@@ -1407,14 +1407,14 @@
<label class="md-nav__link" for="__nav_12" id="__nav_12_label" tabindex="0">
11. 排序算法
11. &nbsp; &nbsp; 排序算法
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_12_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_12">
<span class="md-nav__icon md-icon"></span>
11. 排序算法
11. &nbsp; &nbsp; 排序算法
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -1425,7 +1425,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/intro_to_sort/" class="md-nav__link">
11.1. 排序简介
11.1. &nbsp; 排序简介
</a>
</li>
@@ -1439,7 +1439,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/bubble_sort/" class="md-nav__link">
11.2. 冒泡排序
11.2. &nbsp; 冒泡排序
</a>
</li>
@@ -1453,7 +1453,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/insertion_sort/" class="md-nav__link">
11.3. 插入排序
11.3. &nbsp; 插入排序
</a>
</li>
@@ -1467,7 +1467,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/quick_sort/" class="md-nav__link">
11.4. 快速排序
11.4. &nbsp; 快速排序
</a>
</li>
@@ -1481,7 +1481,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/merge_sort/" class="md-nav__link">
11.5. 归并排序
11.5. &nbsp; 归并排序
</a>
</li>
@@ -1495,7 +1495,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/summary/" class="md-nav__link">
11.6. 小结
11.6. &nbsp; 小结
</a>
</li>
@@ -1583,10 +1583,10 @@
<li class="md-nav__item">
<a href="#731" class="md-nav__link">
7.3.1. 二叉搜索树的操作
7.3.1. &nbsp; 二叉搜索树的操作
</a>
<nav class="md-nav" aria-label="7.3.1. 二叉搜索树的操作">
<nav class="md-nav" aria-label="7.3.1. &nbsp; 二叉搜索树的操作">
<ul class="md-nav__list">
<li class="md-nav__item">
@@ -1624,21 +1624,21 @@
<li class="md-nav__item">
<a href="#732" class="md-nav__link">
7.3.2. 二叉搜索树的效率
7.3.2. &nbsp; 二叉搜索树的效率
</a>
</li>
<li class="md-nav__item">
<a href="#733" class="md-nav__link">
7.3.3. 二叉搜索树的退化
7.3.3. &nbsp; 二叉搜索树的退化
</a>
</li>
<li class="md-nav__item">
<a href="#734" class="md-nav__link">
7.3.4. 二叉搜索树常见应用
7.3.4. &nbsp; 二叉搜索树常见应用
</a>
</li>
@@ -1667,14 +1667,14 @@
<h1 id="73">7.3. 二叉搜索树<a class="headerlink" href="#73" title="Permanent link">&para;</a></h1>
<h1 id="73">7.3. &nbsp; 二叉搜索树<a class="headerlink" href="#73" title="Permanent link">&para;</a></h1>
<p>「二叉搜索树 Binary Search Tree」满足以下条件:</p>
<ol>
<li>对于根结点,左子树中所有结点的值 <span class="arithmatex">\(&lt;\)</span> 根结点的值 <span class="arithmatex">\(&lt;\)</span> 右子树中所有结点的值;</li>
<li>任意结点的左子树和右子树也是二叉搜索树,即也满足条件 <code>1.</code> </li>
</ol>
<p><img alt="binary_search_tree" src="../binary_search_tree.assets/binary_search_tree.png" /></p>
<h2 id="731">7.3.1. 二叉搜索树的操作<a class="headerlink" href="#731" title="Permanent link">&para;</a></h2>
<h2 id="731">7.3.1. &nbsp; 二叉搜索树的操作<a class="headerlink" href="#731" title="Permanent link">&para;</a></h2>
<h3 id="_1">查找结点<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h3>
<p>给定目标结点值 <code>num</code> ,可以根据二叉搜索树的性质来查找。我们声明一个结点 <code>cur</code> ,从二叉树的根结点 <code>root</code> 出发,循环比较结点值 <code>cur.val</code><code>num</code> 之间的大小关系</p>
<ul>
@@ -2741,7 +2741,7 @@
<p>我们知道,「中序遍历」遵循“左 <span class="arithmatex">\(\rightarrow\)</span><span class="arithmatex">\(\rightarrow\)</span> 右”的遍历优先级,而二叉搜索树遵循“左子结点 <span class="arithmatex">\(&lt;\)</span> 根结点 <span class="arithmatex">\(&lt;\)</span> 右子结点”的大小关系。因此,在二叉搜索树中进行中序遍历时,总是会优先遍历下一个最小结点,从而得出一条重要性质:<strong>二叉搜索树的中序遍历序列是升序的</strong></p>
<p>借助中序遍历升序的性质,我们在二叉搜索树中获取有序数据仅需 <span class="arithmatex">\(O(n)\)</span> 时间,而无需额外排序,非常高效。</p>
<p><img alt="bst_inorder_traversal" src="../binary_search_tree.assets/bst_inorder_traversal.png" /></p>
<h2 id="732">7.3.2. 二叉搜索树的效率<a class="headerlink" href="#732" title="Permanent link">&para;</a></h2>
<h2 id="732">7.3.2. &nbsp; 二叉搜索树的效率<a class="headerlink" href="#732" title="Permanent link">&para;</a></h2>
<p>假设给定 <span class="arithmatex">\(n\)</span> 个数字,最常用的存储方式是「数组」,那么对于这串乱序的数字,常见操作的效率为:</p>
<ul>
<li><strong>查找元素</strong>:由于数组是无序的,因此需要遍历数组来确定,使用 <span class="arithmatex">\(O(n)\)</span> 时间;</li>
@@ -2795,7 +2795,7 @@
</tbody>
</table>
</div>
<h2 id="733">7.3.3. 二叉搜索树的退化<a class="headerlink" href="#733" title="Permanent link">&para;</a></h2>
<h2 id="733">7.3.3. &nbsp; 二叉搜索树的退化<a class="headerlink" href="#733" title="Permanent link">&para;</a></h2>
<p>理想情况下,我们希望二叉搜索树的是“左右平衡”的(详见「平衡二叉树」章节),此时可以在 <span class="arithmatex">\(\log n\)</span> 轮循环内查找任意结点。</p>
<p>如果我们动态地在二叉搜索树中插入与删除结点,<strong>则可能导致二叉树退化为链表</strong>,此时各种操作的时间复杂度也退化之 <span class="arithmatex">\(O(n)\)</span></p>
<div class="admonition note">
@@ -2803,7 +2803,7 @@
<p>在实际应用中,如何保持二叉搜索树的平衡,也是一个需要重要考虑的问题。</p>
</div>
<p><img alt="bst_degradation" src="../binary_search_tree.assets/bst_degradation.png" /></p>
<h2 id="734">7.3.4. 二叉搜索树常见应用<a class="headerlink" href="#734" title="Permanent link">&para;</a></h2>
<h2 id="734">7.3.4. &nbsp; 二叉搜索树常见应用<a class="headerlink" href="#734" title="Permanent link">&para;</a></h2>
<ul>
<li>系统中的多级索引,高效查找、插入、删除操作。</li>
<li>各种搜索算法的底层数据结构。</li>
@@ -2886,7 +2886,7 @@
<nav class="md-footer__inner md-grid" aria-label="页脚" >
<a href="../binary_tree_traversal/" class="md-footer__link md-footer__link--prev" aria-label="上一页: 7.2. 二叉树遍历" rel="prev">
<a href="../binary_tree_traversal/" class="md-footer__link md-footer__link--prev" aria-label="上一页: 7.2. &amp;nbsp; 二叉树遍历" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</div>
@@ -2895,20 +2895,20 @@
<span class="md-footer__direction">
上一页
</span>
7.2. 二叉树遍历
7.2. &nbsp; 二叉树遍历
</div>
</div>
</a>
<a href="../avl_tree/" class="md-footer__link md-footer__link--next" aria-label="下一页: 7.4. AVL 树 *" rel="next">
<a href="../avl_tree/" class="md-footer__link md-footer__link--next" aria-label="下一页: 7.4. &amp;nbsp; AVL 树 *" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
下一页
</span>
7.4. AVL 树 *
7.4. &nbsp; AVL 树 *
</div>
</div>
<div class="md-footer__button md-icon">
+93 -93
View File
@@ -25,7 +25,7 @@
<title>7.1. 二叉树(Binary Tree - Hello 算法</title>
<title>7.1.   二叉树(Binary Tree - Hello 算法</title>
@@ -111,7 +111,7 @@
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
7.1. 二叉树(Binary Tree
7.1. &nbsp; 二叉树(Binary Tree
</span>
</div>
@@ -268,14 +268,14 @@
<label class="md-nav__link" for="__nav_1" id="__nav_1_label" tabindex="0">
0. 写在前面
0. &nbsp; &nbsp; 写在前面
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_1">
<span class="md-nav__icon md-icon"></span>
0. 写在前面
0. &nbsp; &nbsp; 写在前面
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -286,7 +286,7 @@
<li class="md-nav__item">
<a href="../../chapter_preface/about_the_book/" class="md-nav__link">
0.1. 关于本书
0.1. &nbsp; 关于本书
</a>
</li>
@@ -300,7 +300,7 @@
<li class="md-nav__item">
<a href="../../chapter_preface/suggestions/" class="md-nav__link">
0.2. 如何使用本书
0.2. &nbsp; 如何使用本书
</a>
</li>
@@ -314,7 +314,7 @@
<li class="md-nav__item">
<a href="../../chapter_preface/installation/" class="md-nav__link">
0.3. 编程环境安装
0.3. &nbsp; 编程环境安装
</a>
</li>
@@ -328,7 +328,7 @@
<li class="md-nav__item">
<a href="../../chapter_preface/contribution/" class="md-nav__link">
0.4. 一起参与创作
0.4. &nbsp; 一起参与创作
</a>
</li>
@@ -367,14 +367,14 @@
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
1. 引言
1. &nbsp; &nbsp; 引言
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
1. 引言
1. &nbsp; &nbsp; 引言
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -385,7 +385,7 @@
<li class="md-nav__item">
<a href="../../chapter_introduction/algorithms_are_everywhere/" class="md-nav__link">
1.1. 算法无处不在
1.1. &nbsp; 算法无处不在
</a>
</li>
@@ -399,7 +399,7 @@
<li class="md-nav__item">
<a href="../../chapter_introduction/what_is_dsa/" class="md-nav__link">
1.2. 算法是什么
1.2. &nbsp; 算法是什么
</a>
</li>
@@ -444,14 +444,14 @@
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
2. 计算复杂度
2. &nbsp; &nbsp; 计算复杂度
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
2. 计算复杂度
2. &nbsp; &nbsp; 计算复杂度
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -462,7 +462,7 @@
<li class="md-nav__item">
<a href="../../chapter_computational_complexity/performance_evaluation/" class="md-nav__link">
2.1. 算法效率评估
2.1. &nbsp; 算法效率评估
</a>
</li>
@@ -476,7 +476,7 @@
<li class="md-nav__item">
<a href="../../chapter_computational_complexity/time_complexity/" class="md-nav__link">
2.2. 时间复杂度
2.2. &nbsp; 时间复杂度
</a>
</li>
@@ -490,7 +490,7 @@
<li class="md-nav__item">
<a href="../../chapter_computational_complexity/space_complexity/" class="md-nav__link">
2.3. 空间复杂度
2.3. &nbsp; 空间复杂度
</a>
</li>
@@ -504,7 +504,7 @@
<li class="md-nav__item">
<a href="../../chapter_computational_complexity/space_time_tradeoff/" class="md-nav__link">
2.4. 权衡时间与空间
2.4. &nbsp; 权衡时间与空间
</a>
</li>
@@ -518,7 +518,7 @@
<li class="md-nav__item">
<a href="../../chapter_computational_complexity/summary/" class="md-nav__link">
2.5. 小结
2.5. &nbsp; 小结
</a>
</li>
@@ -559,14 +559,14 @@
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
3. 数据结构简介
3. &nbsp; &nbsp; 数据结构简介
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
3. 数据结构简介
3. &nbsp; &nbsp; 数据结构简介
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -577,7 +577,7 @@
<li class="md-nav__item">
<a href="../../chapter_data_structure/data_and_memory/" class="md-nav__link">
3.1. 数据与内存
3.1. &nbsp; 数据与内存
</a>
</li>
@@ -591,7 +591,7 @@
<li class="md-nav__item">
<a href="../../chapter_data_structure/classification_of_data_structure/" class="md-nav__link">
3.2. 数据结构分类
3.2. &nbsp; 数据结构分类
</a>
</li>
@@ -605,7 +605,7 @@
<li class="md-nav__item">
<a href="../../chapter_data_structure/summary/" class="md-nav__link">
3.3. 小结
3.3. &nbsp; 小结
</a>
</li>
@@ -648,14 +648,14 @@
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
4. 数组与链表
4. &nbsp; &nbsp; 数组与链表
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
4. 数组与链表
4. &nbsp; &nbsp; 数组与链表
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -666,7 +666,7 @@
<li class="md-nav__item">
<a href="../../chapter_array_and_linkedlist/array/" class="md-nav__link">
4.1. 数组(Array
4.1. &nbsp; 数组(Array
</a>
</li>
@@ -680,7 +680,7 @@
<li class="md-nav__item">
<a href="../../chapter_array_and_linkedlist/linked_list/" class="md-nav__link">
4.2. 链表(LinkedList
4.2. &nbsp; 链表(LinkedList
</a>
</li>
@@ -694,7 +694,7 @@
<li class="md-nav__item">
<a href="../../chapter_array_and_linkedlist/list/" class="md-nav__link">
4.3. 列表(List
4.3. &nbsp; 列表(List
</a>
</li>
@@ -708,7 +708,7 @@
<li class="md-nav__item">
<a href="../../chapter_array_and_linkedlist/summary/" class="md-nav__link">
4.4. 小结
4.4. &nbsp; 小结
</a>
</li>
@@ -751,14 +751,14 @@
<label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
5. 栈与队列
5. &nbsp; &nbsp; 栈与队列
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
5. 栈与队列
5. &nbsp; &nbsp; 栈与队列
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -769,7 +769,7 @@
<li class="md-nav__item">
<a href="../../chapter_stack_and_queue/stack/" class="md-nav__link">
5.1. 栈(Stack
5.1. &nbsp; 栈(Stack
</a>
</li>
@@ -783,7 +783,7 @@
<li class="md-nav__item">
<a href="../../chapter_stack_and_queue/queue/" class="md-nav__link">
5.2. 队列(Queue
5.2. &nbsp; 队列(Queue
</a>
</li>
@@ -797,7 +797,7 @@
<li class="md-nav__item">
<a href="../../chapter_stack_and_queue/deque/" class="md-nav__link">
5.3. 双向队列(Deque
5.3. &nbsp; 双向队列(Deque
</a>
</li>
@@ -811,7 +811,7 @@
<li class="md-nav__item">
<a href="../../chapter_stack_and_queue/summary/" class="md-nav__link">
5.4. 小结
5.4. &nbsp; 小结
</a>
</li>
@@ -852,14 +852,14 @@
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
6. 散列表
6. &nbsp; &nbsp; 散列表
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
6. 散列表
6. &nbsp; &nbsp; 散列表
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -870,7 +870,7 @@
<li class="md-nav__item">
<a href="../../chapter_hashing/hash_map/" class="md-nav__link">
6.1. 哈希表(HashMap
6.1. &nbsp; 哈希表(HashMap
</a>
</li>
@@ -884,7 +884,7 @@
<li class="md-nav__item">
<a href="../../chapter_hashing/hash_collision/" class="md-nav__link">
6.2. 哈希冲突处理
6.2. &nbsp; 哈希冲突处理
</a>
</li>
@@ -898,7 +898,7 @@
<li class="md-nav__item">
<a href="../../chapter_hashing/summary/" class="md-nav__link">
6.3. 小结
6.3. &nbsp; 小结
</a>
</li>
@@ -945,14 +945,14 @@
<label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="0">
7. 二叉树
7. &nbsp; &nbsp; 二叉树
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_8_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_8">
<span class="md-nav__icon md-icon"></span>
7. 二叉树
7. &nbsp; &nbsp; 二叉树
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -972,12 +972,12 @@
<label class="md-nav__link md-nav__link--active" for="__toc">
7.1. 二叉树(Binary Tree
7.1. &nbsp; 二叉树(Binary Tree
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
7.1. 二叉树(Binary Tree
7.1. &nbsp; 二叉树(Binary Tree
</a>
@@ -997,24 +997,24 @@
<li class="md-nav__item">
<a href="#711" class="md-nav__link">
7.1.1. 二叉树常见术语
7.1.1. &nbsp; 二叉树常见术语
</a>
</li>
<li class="md-nav__item">
<a href="#712" class="md-nav__link">
7.1.2. 二叉树基本操作
7.1.2. &nbsp; 二叉树基本操作
</a>
</li>
<li class="md-nav__item">
<a href="#713" class="md-nav__link">
7.1.3. 常见二叉树类型
7.1.3. &nbsp; 常见二叉树类型
</a>
<nav class="md-nav" aria-label="7.1.3. 常见二叉树类型">
<nav class="md-nav" aria-label="7.1.3. &nbsp; 常见二叉树类型">
<ul class="md-nav__list">
<li class="md-nav__item">
@@ -1052,14 +1052,14 @@
<li class="md-nav__item">
<a href="#714" class="md-nav__link">
7.1.4. 二叉树的退化
7.1.4. &nbsp; 二叉树的退化
</a>
</li>
<li class="md-nav__item">
<a href="#715" class="md-nav__link">
7.1.5. 二叉树表示方式 *
7.1.5. &nbsp; 二叉树表示方式 *
</a>
</li>
@@ -1080,7 +1080,7 @@
<li class="md-nav__item">
<a href="../binary_tree_traversal/" class="md-nav__link">
7.2. 二叉树遍历
7.2. &nbsp; 二叉树遍历
</a>
</li>
@@ -1094,7 +1094,7 @@
<li class="md-nav__item">
<a href="../binary_search_tree/" class="md-nav__link">
7.3. 二叉搜索树
7.3. &nbsp; 二叉搜索树
</a>
</li>
@@ -1108,7 +1108,7 @@
<li class="md-nav__item">
<a href="../avl_tree/" class="md-nav__link">
7.4. AVL 树 *
7.4. &nbsp; AVL 树 *
</a>
</li>
@@ -1122,7 +1122,7 @@
<li class="md-nav__item">
<a href="../summary/" class="md-nav__link">
7.5. 小结
7.5. &nbsp; 小结
</a>
</li>
@@ -1159,14 +1159,14 @@
<label class="md-nav__link" for="__nav_9" id="__nav_9_label" tabindex="0">
8. 堆
8. &nbsp; &nbsp;
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_9_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_9">
<span class="md-nav__icon md-icon"></span>
8. 堆
8. &nbsp; &nbsp;
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -1177,7 +1177,7 @@
<li class="md-nav__item">
<a href="../../chapter_heap/heap/" class="md-nav__link">
8.1. 堆(Heap
8.1. &nbsp; 堆(Heap
</a>
</li>
@@ -1218,14 +1218,14 @@
<label class="md-nav__link" for="__nav_10" id="__nav_10_label" tabindex="0">
9. 图
9. &nbsp; &nbsp;
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_10_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_10">
<span class="md-nav__icon md-icon"></span>
9. 图
9. &nbsp; &nbsp;
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -1236,7 +1236,7 @@
<li class="md-nav__item">
<a href="../../chapter_graph/graph/" class="md-nav__link">
9.1. 图(Graph
9.1. &nbsp; 图(Graph
</a>
</li>
@@ -1250,7 +1250,7 @@
<li class="md-nav__item">
<a href="../../chapter_graph/graph_operations/" class="md-nav__link">
9.2. 图基础操作
9.2. &nbsp; 图基础操作
</a>
</li>
@@ -1264,7 +1264,7 @@
<li class="md-nav__item">
<a href="../../chapter_graph/graph_traversal/" class="md-nav__link">
9.3. 图的遍历
9.3. &nbsp; 图的遍历
</a>
</li>
@@ -1307,14 +1307,14 @@
<label class="md-nav__link" for="__nav_11" id="__nav_11_label" tabindex="0">
10. 查找算法
10. &nbsp; &nbsp; 查找算法
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_11_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_11">
<span class="md-nav__icon md-icon"></span>
10. 查找算法
10. &nbsp; &nbsp; 查找算法
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -1325,7 +1325,7 @@
<li class="md-nav__item">
<a href="../../chapter_searching/linear_search/" class="md-nav__link">
10.1. 线性查找
10.1. &nbsp; 线性查找
</a>
</li>
@@ -1339,7 +1339,7 @@
<li class="md-nav__item">
<a href="../../chapter_searching/binary_search/" class="md-nav__link">
10.2. 二分查找
10.2. &nbsp; 二分查找
</a>
</li>
@@ -1353,7 +1353,7 @@
<li class="md-nav__item">
<a href="../../chapter_searching/hashing_search/" class="md-nav__link">
10.3. 哈希查找
10.3. &nbsp; 哈希查找
</a>
</li>
@@ -1367,7 +1367,7 @@
<li class="md-nav__item">
<a href="../../chapter_searching/summary/" class="md-nav__link">
10.4. 小结
10.4. &nbsp; 小结
</a>
</li>
@@ -1414,14 +1414,14 @@
<label class="md-nav__link" for="__nav_12" id="__nav_12_label" tabindex="0">
11. 排序算法
11. &nbsp; &nbsp; 排序算法
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_12_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_12">
<span class="md-nav__icon md-icon"></span>
11. 排序算法
11. &nbsp; &nbsp; 排序算法
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -1432,7 +1432,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/intro_to_sort/" class="md-nav__link">
11.1. 排序简介
11.1. &nbsp; 排序简介
</a>
</li>
@@ -1446,7 +1446,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/bubble_sort/" class="md-nav__link">
11.2. 冒泡排序
11.2. &nbsp; 冒泡排序
</a>
</li>
@@ -1460,7 +1460,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/insertion_sort/" class="md-nav__link">
11.3. 插入排序
11.3. &nbsp; 插入排序
</a>
</li>
@@ -1474,7 +1474,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/quick_sort/" class="md-nav__link">
11.4. 快速排序
11.4. &nbsp; 快速排序
</a>
</li>
@@ -1488,7 +1488,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/merge_sort/" class="md-nav__link">
11.5. 归并排序
11.5. &nbsp; 归并排序
</a>
</li>
@@ -1502,7 +1502,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/summary/" class="md-nav__link">
11.6. 小结
11.6. &nbsp; 小结
</a>
</li>
@@ -1590,24 +1590,24 @@
<li class="md-nav__item">
<a href="#711" class="md-nav__link">
7.1.1. 二叉树常见术语
7.1.1. &nbsp; 二叉树常见术语
</a>
</li>
<li class="md-nav__item">
<a href="#712" class="md-nav__link">
7.1.2. 二叉树基本操作
7.1.2. &nbsp; 二叉树基本操作
</a>
</li>
<li class="md-nav__item">
<a href="#713" class="md-nav__link">
7.1.3. 常见二叉树类型
7.1.3. &nbsp; 常见二叉树类型
</a>
<nav class="md-nav" aria-label="7.1.3. 常见二叉树类型">
<nav class="md-nav" aria-label="7.1.3. &nbsp; 常见二叉树类型">
<ul class="md-nav__list">
<li class="md-nav__item">
@@ -1645,14 +1645,14 @@
<li class="md-nav__item">
<a href="#714" class="md-nav__link">
7.1.4. 二叉树的退化
7.1.4. &nbsp; 二叉树的退化
</a>
</li>
<li class="md-nav__item">
<a href="#715" class="md-nav__link">
7.1.5. 二叉树表示方式 *
7.1.5. &nbsp; 二叉树表示方式 *
</a>
</li>
@@ -1681,7 +1681,7 @@
<h1 id="71">7.1. 二叉树<a class="headerlink" href="#71" title="Permanent link">&para;</a></h1>
<h1 id="71">7.1. &nbsp; 二叉树<a class="headerlink" href="#71" title="Permanent link">&para;</a></h1>
<p>「二叉树 Binary Tree」是一种非线性数据结构,代表着祖先与后代之间的派生关系,体现着“一分为二”的分治逻辑。类似于链表,二叉树也是以结点为单位存储的,结点包含「值」和两个「指针」。</p>
<div class="tabbed-set tabbed-alternate" data-tabs="1:10"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><input id="__tabbed_1_2" name="__tabbed_1" type="radio" /><input id="__tabbed_1_3" name="__tabbed_1" type="radio" /><input id="__tabbed_1_4" name="__tabbed_1" type="radio" /><input id="__tabbed_1_5" name="__tabbed_1" type="radio" /><input id="__tabbed_1_6" name="__tabbed_1" type="radio" /><input id="__tabbed_1_7" name="__tabbed_1" type="radio" /><input id="__tabbed_1_8" name="__tabbed_1" type="radio" /><input id="__tabbed_1_9" name="__tabbed_1" type="radio" /><input id="__tabbed_1_10" name="__tabbed_1" type="radio" /><div class="tabbed-labels"><label for="__tabbed_1_1">Java</label><label for="__tabbed_1_2">C++</label><label for="__tabbed_1_3">Python</label><label for="__tabbed_1_4">Go</label><label for="__tabbed_1_5">JavaScript</label><label for="__tabbed_1_6">TypeScript</label><label for="__tabbed_1_7">C</label><label for="__tabbed_1_8">C#</label><label for="__tabbed_1_9">Swift</label><label for="__tabbed_1_10">Zig</label></div>
<div class="tabbed-content">
@@ -1793,7 +1793,7 @@
<p><img alt="binary_tree_definition" src="../binary_tree.assets/binary_tree_definition.png" /></p>
<p align="center"> Fig. 子结点与子树 </p>
<h2 id="711">7.1.1. 二叉树常见术语<a class="headerlink" href="#711" title="Permanent link">&para;</a></h2>
<h2 id="711">7.1.1. &nbsp; 二叉树常见术语<a class="headerlink" href="#711" title="Permanent link">&para;</a></h2>
<p>二叉树的术语较多,建议尽量理解并记住。后续可能遗忘,可以在需要使用时回来查看确认。</p>
<ul>
<li>「根结点 Root Node」:二叉树最顶层的结点,其没有父结点;</li>
@@ -1812,7 +1812,7 @@
<p class="admonition-title">高度与深度的定义</p>
<p>值得注意,我们通常将「高度」和「深度」定义为“走过边的数量”,而有些题目或教材会将其定义为“走过结点的数量”,此时高度或深度都需要 + 1 。</p>
</div>
<h2 id="712">7.1.2. 二叉树基本操作<a class="headerlink" href="#712" title="Permanent link">&para;</a></h2>
<h2 id="712">7.1.2. &nbsp; 二叉树基本操作<a class="headerlink" href="#712" title="Permanent link">&para;</a></h2>
<p><strong>初始化二叉树</strong>。与链表类似,先初始化结点,再构建引用指向(即指针)。</p>
<div class="tabbed-set tabbed-alternate" data-tabs="2:10"><input checked="checked" id="__tabbed_2_1" name="__tabbed_2" type="radio" /><input id="__tabbed_2_2" name="__tabbed_2" type="radio" /><input id="__tabbed_2_3" name="__tabbed_2" type="radio" /><input id="__tabbed_2_4" name="__tabbed_2" type="radio" /><input id="__tabbed_2_5" name="__tabbed_2" type="radio" /><input id="__tabbed_2_6" name="__tabbed_2" type="radio" /><input id="__tabbed_2_7" name="__tabbed_2" type="radio" /><input id="__tabbed_2_8" name="__tabbed_2" type="radio" /><input id="__tabbed_2_9" name="__tabbed_2" type="radio" /><input id="__tabbed_2_10" name="__tabbed_2" type="radio" /><div class="tabbed-labels"><label for="__tabbed_2_1">Java</label><label for="__tabbed_2_2">C++</label><label for="__tabbed_2_3">Python</label><label for="__tabbed_2_4">Go</label><label for="__tabbed_2_5">JavaScript</label><label for="__tabbed_2_6">TypeScript</label><label for="__tabbed_2_7">C</label><label for="__tabbed_2_8">C#</label><label for="__tabbed_2_9">Swift</label><label for="__tabbed_2_10">Zig</label></div>
<div class="tabbed-content">
@@ -2042,7 +2042,7 @@
<p class="admonition-title">Note</p>
<p>插入结点会改变二叉树的原有逻辑结构,删除结点往往意味着删除了该结点的所有子树。因此,二叉树中的插入与删除一般都是由一套操作配合完成的,这样才能实现有意义的操作。</p>
</div>
<h2 id="713">7.1.3. 常见二叉树类型<a class="headerlink" href="#713" title="Permanent link">&para;</a></h2>
<h2 id="713">7.1.3. &nbsp; 常见二叉树类型<a class="headerlink" href="#713" title="Permanent link">&para;</a></h2>
<h3 id="_1">完美二叉树<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h3>
<p>「完美二叉树 Perfect Binary Tree」的所有层的结点都被完全填满。在完美二叉树中,所有结点的度 = 2 ;若树高度 <span class="arithmatex">\(= h\)</span> ,则结点总数 <span class="arithmatex">\(= 2^{h+1} - 1\)</span> ,呈标准的指数级关系,反映着自然界中常见的细胞分裂。</p>
<div class="admonition tip">
@@ -2060,7 +2060,7 @@
<h3 id="_4">平衡二叉树<a class="headerlink" href="#_4" title="Permanent link">&para;</a></h3>
<p>「平衡二叉树 Balanced Binary Tree」中任意结点的左子树和右子树的高度之差的绝对值 <span class="arithmatex">\(\leq 1\)</span></p>
<p><img alt="balanced_binary_tree" src="../binary_tree.assets/balanced_binary_tree.png" /></p>
<h2 id="714">7.1.4. 二叉树的退化<a class="headerlink" href="#714" title="Permanent link">&para;</a></h2>
<h2 id="714">7.1.4. &nbsp; 二叉树的退化<a class="headerlink" href="#714" title="Permanent link">&para;</a></h2>
<p>当二叉树的每层的结点都被填满时,达到「完美二叉树」;而当所有结点都偏向一边时,二叉树退化为「链表」。</p>
<ul>
<li>完美二叉树是一个二叉树的“最佳状态”,可以完全发挥出二叉树“分治”的优势;</li>
@@ -2103,7 +2103,7 @@
</tbody>
</table>
</div>
<h2 id="715">7.1.5. 二叉树表示方式 *<a class="headerlink" href="#715" title="Permanent link">&para;</a></h2>
<h2 id="715">7.1.5. &nbsp; 二叉树表示方式 *<a class="headerlink" href="#715" title="Permanent link">&para;</a></h2>
<p>我们一般使用二叉树的「链表表示」,即存储单位为结点 <code>TreeNode</code> ,结点之间通过指针(引用)相连接。本文前述示例代码展示了二叉树在链表表示下的各项基本操作。</p>
<p>那能否可以用「数组表示」二叉树呢?答案是肯定的。先来分析一个简单案例,给定一个「完美二叉树」,将结点按照层序遍历的顺序编号(从 0 开始),那么可以推导得出父结点索引与子结点索引之间的「映射公式」:<strong>设结点的索引为 <span class="arithmatex">\(i\)</span> ,则该结点的左子结点索引为 <span class="arithmatex">\(2i + 1\)</span> 、右子结点索引为 <span class="arithmatex">\(2i + 2\)</span></strong></p>
<p><strong>本质上,映射公式的作用就是链表中的指针</strong>。对于层序遍历序列中的任意结点,我们都可以使用映射公式来访问子结点。因此,可以直接使用层序遍历序列(即数组)来表示完美二叉树。</p>
@@ -2251,7 +2251,7 @@
<nav class="md-footer__inner md-grid" aria-label="页脚" >
<a href="../../chapter_hashing/summary/" class="md-footer__link md-footer__link--prev" aria-label="上一页: 6.3. 小结" rel="prev">
<a href="../../chapter_hashing/summary/" class="md-footer__link md-footer__link--prev" aria-label="上一页: 6.3. &amp;nbsp; 小结" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</div>
@@ -2260,20 +2260,20 @@
<span class="md-footer__direction">
上一页
</span>
6.3. 小结
6.3. &nbsp; 小结
</div>
</div>
</a>
<a href="../binary_tree_traversal/" class="md-footer__link md-footer__link--next" aria-label="下一页: 7.2. 二叉树遍历" rel="next">
<a href="../binary_tree_traversal/" class="md-footer__link md-footer__link--next" aria-label="下一页: 7.2. &amp;nbsp; 二叉树遍历" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
下一页
</span>
7.2. 二叉树遍历
7.2. &nbsp; 二叉树遍历
</div>
</div>
<div class="md-footer__button md-icon">
+86 -86
View File
@@ -25,7 +25,7 @@
<title>7.2. 二叉树遍历 - Hello 算法</title>
<title>7.2.   二叉树遍历 - Hello 算法</title>
@@ -111,7 +111,7 @@
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
7.2. 二叉树遍历
7.2. &nbsp; 二叉树遍历
</span>
</div>
@@ -268,14 +268,14 @@
<label class="md-nav__link" for="__nav_1" id="__nav_1_label" tabindex="0">
0. 写在前面
0. &nbsp; &nbsp; 写在前面
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_1">
<span class="md-nav__icon md-icon"></span>
0. 写在前面
0. &nbsp; &nbsp; 写在前面
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -286,7 +286,7 @@
<li class="md-nav__item">
<a href="../../chapter_preface/about_the_book/" class="md-nav__link">
0.1. 关于本书
0.1. &nbsp; 关于本书
</a>
</li>
@@ -300,7 +300,7 @@
<li class="md-nav__item">
<a href="../../chapter_preface/suggestions/" class="md-nav__link">
0.2. 如何使用本书
0.2. &nbsp; 如何使用本书
</a>
</li>
@@ -314,7 +314,7 @@
<li class="md-nav__item">
<a href="../../chapter_preface/installation/" class="md-nav__link">
0.3. 编程环境安装
0.3. &nbsp; 编程环境安装
</a>
</li>
@@ -328,7 +328,7 @@
<li class="md-nav__item">
<a href="../../chapter_preface/contribution/" class="md-nav__link">
0.4. 一起参与创作
0.4. &nbsp; 一起参与创作
</a>
</li>
@@ -367,14 +367,14 @@
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
1. 引言
1. &nbsp; &nbsp; 引言
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
1. 引言
1. &nbsp; &nbsp; 引言
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -385,7 +385,7 @@
<li class="md-nav__item">
<a href="../../chapter_introduction/algorithms_are_everywhere/" class="md-nav__link">
1.1. 算法无处不在
1.1. &nbsp; 算法无处不在
</a>
</li>
@@ -399,7 +399,7 @@
<li class="md-nav__item">
<a href="../../chapter_introduction/what_is_dsa/" class="md-nav__link">
1.2. 算法是什么
1.2. &nbsp; 算法是什么
</a>
</li>
@@ -444,14 +444,14 @@
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
2. 计算复杂度
2. &nbsp; &nbsp; 计算复杂度
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
2. 计算复杂度
2. &nbsp; &nbsp; 计算复杂度
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -462,7 +462,7 @@
<li class="md-nav__item">
<a href="../../chapter_computational_complexity/performance_evaluation/" class="md-nav__link">
2.1. 算法效率评估
2.1. &nbsp; 算法效率评估
</a>
</li>
@@ -476,7 +476,7 @@
<li class="md-nav__item">
<a href="../../chapter_computational_complexity/time_complexity/" class="md-nav__link">
2.2. 时间复杂度
2.2. &nbsp; 时间复杂度
</a>
</li>
@@ -490,7 +490,7 @@
<li class="md-nav__item">
<a href="../../chapter_computational_complexity/space_complexity/" class="md-nav__link">
2.3. 空间复杂度
2.3. &nbsp; 空间复杂度
</a>
</li>
@@ -504,7 +504,7 @@
<li class="md-nav__item">
<a href="../../chapter_computational_complexity/space_time_tradeoff/" class="md-nav__link">
2.4. 权衡时间与空间
2.4. &nbsp; 权衡时间与空间
</a>
</li>
@@ -518,7 +518,7 @@
<li class="md-nav__item">
<a href="../../chapter_computational_complexity/summary/" class="md-nav__link">
2.5. 小结
2.5. &nbsp; 小结
</a>
</li>
@@ -559,14 +559,14 @@
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
3. 数据结构简介
3. &nbsp; &nbsp; 数据结构简介
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
3. 数据结构简介
3. &nbsp; &nbsp; 数据结构简介
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -577,7 +577,7 @@
<li class="md-nav__item">
<a href="../../chapter_data_structure/data_and_memory/" class="md-nav__link">
3.1. 数据与内存
3.1. &nbsp; 数据与内存
</a>
</li>
@@ -591,7 +591,7 @@
<li class="md-nav__item">
<a href="../../chapter_data_structure/classification_of_data_structure/" class="md-nav__link">
3.2. 数据结构分类
3.2. &nbsp; 数据结构分类
</a>
</li>
@@ -605,7 +605,7 @@
<li class="md-nav__item">
<a href="../../chapter_data_structure/summary/" class="md-nav__link">
3.3. 小结
3.3. &nbsp; 小结
</a>
</li>
@@ -648,14 +648,14 @@
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
4. 数组与链表
4. &nbsp; &nbsp; 数组与链表
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
4. 数组与链表
4. &nbsp; &nbsp; 数组与链表
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -666,7 +666,7 @@
<li class="md-nav__item">
<a href="../../chapter_array_and_linkedlist/array/" class="md-nav__link">
4.1. 数组(Array
4.1. &nbsp; 数组(Array
</a>
</li>
@@ -680,7 +680,7 @@
<li class="md-nav__item">
<a href="../../chapter_array_and_linkedlist/linked_list/" class="md-nav__link">
4.2. 链表(LinkedList
4.2. &nbsp; 链表(LinkedList
</a>
</li>
@@ -694,7 +694,7 @@
<li class="md-nav__item">
<a href="../../chapter_array_and_linkedlist/list/" class="md-nav__link">
4.3. 列表(List
4.3. &nbsp; 列表(List
</a>
</li>
@@ -708,7 +708,7 @@
<li class="md-nav__item">
<a href="../../chapter_array_and_linkedlist/summary/" class="md-nav__link">
4.4. 小结
4.4. &nbsp; 小结
</a>
</li>
@@ -751,14 +751,14 @@
<label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
5. 栈与队列
5. &nbsp; &nbsp; 栈与队列
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
5. 栈与队列
5. &nbsp; &nbsp; 栈与队列
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -769,7 +769,7 @@
<li class="md-nav__item">
<a href="../../chapter_stack_and_queue/stack/" class="md-nav__link">
5.1. 栈(Stack
5.1. &nbsp; 栈(Stack
</a>
</li>
@@ -783,7 +783,7 @@
<li class="md-nav__item">
<a href="../../chapter_stack_and_queue/queue/" class="md-nav__link">
5.2. 队列(Queue
5.2. &nbsp; 队列(Queue
</a>
</li>
@@ -797,7 +797,7 @@
<li class="md-nav__item">
<a href="../../chapter_stack_and_queue/deque/" class="md-nav__link">
5.3. 双向队列(Deque
5.3. &nbsp; 双向队列(Deque
</a>
</li>
@@ -811,7 +811,7 @@
<li class="md-nav__item">
<a href="../../chapter_stack_and_queue/summary/" class="md-nav__link">
5.4. 小结
5.4. &nbsp; 小结
</a>
</li>
@@ -852,14 +852,14 @@
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
6. 散列表
6. &nbsp; &nbsp; 散列表
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
6. 散列表
6. &nbsp; &nbsp; 散列表
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -870,7 +870,7 @@
<li class="md-nav__item">
<a href="../../chapter_hashing/hash_map/" class="md-nav__link">
6.1. 哈希表(HashMap
6.1. &nbsp; 哈希表(HashMap
</a>
</li>
@@ -884,7 +884,7 @@
<li class="md-nav__item">
<a href="../../chapter_hashing/hash_collision/" class="md-nav__link">
6.2. 哈希冲突处理
6.2. &nbsp; 哈希冲突处理
</a>
</li>
@@ -898,7 +898,7 @@
<li class="md-nav__item">
<a href="../../chapter_hashing/summary/" class="md-nav__link">
6.3. 小结
6.3. &nbsp; 小结
</a>
</li>
@@ -945,14 +945,14 @@
<label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="0">
7. 二叉树
7. &nbsp; &nbsp; 二叉树
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_8_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_8">
<span class="md-nav__icon md-icon"></span>
7. 二叉树
7. &nbsp; &nbsp; 二叉树
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -963,7 +963,7 @@
<li class="md-nav__item">
<a href="../binary_tree/" class="md-nav__link">
7.1. 二叉树(Binary Tree
7.1. &nbsp; 二叉树(Binary Tree
</a>
</li>
@@ -986,12 +986,12 @@
<label class="md-nav__link md-nav__link--active" for="__toc">
7.2. 二叉树遍历
7.2. &nbsp; 二叉树遍历
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
7.2. 二叉树遍历
7.2. &nbsp; 二叉树遍历
</a>
@@ -1011,10 +1011,10 @@
<li class="md-nav__item">
<a href="#721" class="md-nav__link">
7.2.1. 层序遍历
7.2.1. &nbsp; 层序遍历
</a>
<nav class="md-nav" aria-label="7.2.1. 层序遍历">
<nav class="md-nav" aria-label="7.2.1. &nbsp; 层序遍历">
<ul class="md-nav__list">
<li class="md-nav__item">
@@ -1038,10 +1038,10 @@
<li class="md-nav__item">
<a href="#722" class="md-nav__link">
7.2.2. 前序、中序、后序遍历
7.2.2. &nbsp; 前序、中序、后序遍历
</a>
<nav class="md-nav" aria-label="7.2.2. 前序、中序、后序遍历">
<nav class="md-nav" aria-label="7.2.2. &nbsp; 前序、中序、后序遍历">
<ul class="md-nav__list">
<li class="md-nav__item">
@@ -1079,7 +1079,7 @@
<li class="md-nav__item">
<a href="../binary_search_tree/" class="md-nav__link">
7.3. 二叉搜索树
7.3. &nbsp; 二叉搜索树
</a>
</li>
@@ -1093,7 +1093,7 @@
<li class="md-nav__item">
<a href="../avl_tree/" class="md-nav__link">
7.4. AVL 树 *
7.4. &nbsp; AVL 树 *
</a>
</li>
@@ -1107,7 +1107,7 @@
<li class="md-nav__item">
<a href="../summary/" class="md-nav__link">
7.5. 小结
7.5. &nbsp; 小结
</a>
</li>
@@ -1144,14 +1144,14 @@
<label class="md-nav__link" for="__nav_9" id="__nav_9_label" tabindex="0">
8. 堆
8. &nbsp; &nbsp;
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_9_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_9">
<span class="md-nav__icon md-icon"></span>
8. 堆
8. &nbsp; &nbsp;
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -1162,7 +1162,7 @@
<li class="md-nav__item">
<a href="../../chapter_heap/heap/" class="md-nav__link">
8.1. 堆(Heap
8.1. &nbsp; 堆(Heap
</a>
</li>
@@ -1203,14 +1203,14 @@
<label class="md-nav__link" for="__nav_10" id="__nav_10_label" tabindex="0">
9. 图
9. &nbsp; &nbsp;
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_10_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_10">
<span class="md-nav__icon md-icon"></span>
9. 图
9. &nbsp; &nbsp;
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -1221,7 +1221,7 @@
<li class="md-nav__item">
<a href="../../chapter_graph/graph/" class="md-nav__link">
9.1. 图(Graph
9.1. &nbsp; 图(Graph
</a>
</li>
@@ -1235,7 +1235,7 @@
<li class="md-nav__item">
<a href="../../chapter_graph/graph_operations/" class="md-nav__link">
9.2. 图基础操作
9.2. &nbsp; 图基础操作
</a>
</li>
@@ -1249,7 +1249,7 @@
<li class="md-nav__item">
<a href="../../chapter_graph/graph_traversal/" class="md-nav__link">
9.3. 图的遍历
9.3. &nbsp; 图的遍历
</a>
</li>
@@ -1292,14 +1292,14 @@
<label class="md-nav__link" for="__nav_11" id="__nav_11_label" tabindex="0">
10. 查找算法
10. &nbsp; &nbsp; 查找算法
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_11_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_11">
<span class="md-nav__icon md-icon"></span>
10. 查找算法
10. &nbsp; &nbsp; 查找算法
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -1310,7 +1310,7 @@
<li class="md-nav__item">
<a href="../../chapter_searching/linear_search/" class="md-nav__link">
10.1. 线性查找
10.1. &nbsp; 线性查找
</a>
</li>
@@ -1324,7 +1324,7 @@
<li class="md-nav__item">
<a href="../../chapter_searching/binary_search/" class="md-nav__link">
10.2. 二分查找
10.2. &nbsp; 二分查找
</a>
</li>
@@ -1338,7 +1338,7 @@
<li class="md-nav__item">
<a href="../../chapter_searching/hashing_search/" class="md-nav__link">
10.3. 哈希查找
10.3. &nbsp; 哈希查找
</a>
</li>
@@ -1352,7 +1352,7 @@
<li class="md-nav__item">
<a href="../../chapter_searching/summary/" class="md-nav__link">
10.4. 小结
10.4. &nbsp; 小结
</a>
</li>
@@ -1399,14 +1399,14 @@
<label class="md-nav__link" for="__nav_12" id="__nav_12_label" tabindex="0">
11. 排序算法
11. &nbsp; &nbsp; 排序算法
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_12_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_12">
<span class="md-nav__icon md-icon"></span>
11. 排序算法
11. &nbsp; &nbsp; 排序算法
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -1417,7 +1417,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/intro_to_sort/" class="md-nav__link">
11.1. 排序简介
11.1. &nbsp; 排序简介
</a>
</li>
@@ -1431,7 +1431,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/bubble_sort/" class="md-nav__link">
11.2. 冒泡排序
11.2. &nbsp; 冒泡排序
</a>
</li>
@@ -1445,7 +1445,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/insertion_sort/" class="md-nav__link">
11.3. 插入排序
11.3. &nbsp; 插入排序
</a>
</li>
@@ -1459,7 +1459,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/quick_sort/" class="md-nav__link">
11.4. 快速排序
11.4. &nbsp; 快速排序
</a>
</li>
@@ -1473,7 +1473,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/merge_sort/" class="md-nav__link">
11.5. 归并排序
11.5. &nbsp; 归并排序
</a>
</li>
@@ -1487,7 +1487,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/summary/" class="md-nav__link">
11.6. 小结
11.6. &nbsp; 小结
</a>
</li>
@@ -1575,10 +1575,10 @@
<li class="md-nav__item">
<a href="#721" class="md-nav__link">
7.2.1. 层序遍历
7.2.1. &nbsp; 层序遍历
</a>
<nav class="md-nav" aria-label="7.2.1. 层序遍历">
<nav class="md-nav" aria-label="7.2.1. &nbsp; 层序遍历">
<ul class="md-nav__list">
<li class="md-nav__item">
@@ -1602,10 +1602,10 @@
<li class="md-nav__item">
<a href="#722" class="md-nav__link">
7.2.2. 前序、中序、后序遍历
7.2.2. &nbsp; 前序、中序、后序遍历
</a>
<nav class="md-nav" aria-label="7.2.2. 前序、中序、后序遍历">
<nav class="md-nav" aria-label="7.2.2. &nbsp; 前序、中序、后序遍历">
<ul class="md-nav__list">
<li class="md-nav__item">
@@ -1651,10 +1651,10 @@
<h1 id="72">7.2. 二叉树遍历<a class="headerlink" href="#72" title="Permanent link">&para;</a></h1>
<h1 id="72">7.2. &nbsp; 二叉树遍历<a class="headerlink" href="#72" title="Permanent link">&para;</a></h1>
<p>从物理结构角度看,树是一种基于链表的数据结构,因此遍历方式也是通过指针(即引用)逐个遍历结点。同时,树还是一种非线性数据结构,这导致遍历树比遍历链表更加复杂,需要使用搜索算法来实现。</p>
<p>常见的二叉树遍历方式有层序遍历、前序遍历、中序遍历、后序遍历。</p>
<h2 id="721">7.2.1. 层序遍历<a class="headerlink" href="#721" title="Permanent link">&para;</a></h2>
<h2 id="721">7.2.1. &nbsp; 层序遍历<a class="headerlink" href="#721" title="Permanent link">&para;</a></h2>
<p>「层序遍历 Level-Order Traversal」从顶至底、一层一层地遍历二叉树,并在每层中按照从左到右的顺序访问结点。</p>
<p>层序遍历本质上是「广度优先搜索 Breadth-First Traversal」,其体现着一种“一圈一圈向外”的层进遍历方式。</p>
<p><img alt="binary_tree_bfs" src="../binary_tree_traversal.assets/binary_tree_bfs.png" /></p>
@@ -1871,7 +1871,7 @@
<h3 id="_2">复杂度分析<a class="headerlink" href="#_2" title="Permanent link">&para;</a></h3>
<p><strong>时间复杂度</strong>:所有结点被访问一次,使用 <span class="arithmatex">\(O(n)\)</span> 时间,其中 <span class="arithmatex">\(n\)</span> 为结点数量。</p>
<p><strong>空间复杂度</strong>:当为满二叉树时达到最差情况,遍历到最底层前,队列中最多同时存在 <span class="arithmatex">\(\frac{n + 1}{2}\)</span> 个结点,使用 <span class="arithmatex">\(O(n)\)</span> 空间。</p>
<h2 id="722">7.2.2. 前序、中序、后序遍历<a class="headerlink" href="#722" title="Permanent link">&para;</a></h2>
<h2 id="722">7.2.2. &nbsp; 前序、中序、后序遍历<a class="headerlink" href="#722" title="Permanent link">&para;</a></h2>
<p>相对地,前、中、后序遍历皆属于「深度优先遍历 Depth-First Traversal」,其体现着一种“先走到尽头,再回头继续”的回溯遍历方式。</p>
<p>如下图所示,左侧是深度优先遍历的的示意图,右上方是对应的递归实现代码。深度优先遍历就像是绕着整个二叉树的外围“走”一圈,走的过程中,在每个结点都会遇到三个位置,分别对应前序遍历、中序遍历、后序遍历。</p>
<p><img alt="binary_tree_dfs" src="../binary_tree_traversal.assets/binary_tree_dfs.png" /></p>
@@ -2284,7 +2284,7 @@
<nav class="md-footer__inner md-grid" aria-label="页脚" >
<a href="../binary_tree/" class="md-footer__link md-footer__link--prev" aria-label="上一页: 7.1. 二叉树(Binary Tree" rel="prev">
<a href="../binary_tree/" class="md-footer__link md-footer__link--prev" aria-label="上一页: 7.1. &amp;nbsp; 二叉树(Binary Tree" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</div>
@@ -2293,20 +2293,20 @@
<span class="md-footer__direction">
上一页
</span>
7.1. 二叉树(Binary Tree
7.1. &nbsp; 二叉树(Binary Tree
</div>
</div>
</a>
<a href="../binary_search_tree/" class="md-footer__link md-footer__link--next" aria-label="下一页: 7.3. 二叉搜索树" rel="next">
<a href="../binary_search_tree/" class="md-footer__link md-footer__link--next" aria-label="下一页: 7.3. &amp;nbsp; 二叉搜索树" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
下一页
</span>
7.3. 二叉搜索树
7.3. &nbsp; 二叉搜索树
</div>
</div>
<div class="md-footer__button md-icon">
+75 -75
View File
@@ -25,7 +25,7 @@
<title>7.5. 小结 - Hello 算法</title>
<title>7.5.   小结 - Hello 算法</title>
@@ -111,7 +111,7 @@
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
7.5. 小结
7.5. &nbsp; 小结
</span>
</div>
@@ -268,14 +268,14 @@
<label class="md-nav__link" for="__nav_1" id="__nav_1_label" tabindex="0">
0. 写在前面
0. &nbsp; &nbsp; 写在前面
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_1">
<span class="md-nav__icon md-icon"></span>
0. 写在前面
0. &nbsp; &nbsp; 写在前面
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -286,7 +286,7 @@
<li class="md-nav__item">
<a href="../../chapter_preface/about_the_book/" class="md-nav__link">
0.1. 关于本书
0.1. &nbsp; 关于本书
</a>
</li>
@@ -300,7 +300,7 @@
<li class="md-nav__item">
<a href="../../chapter_preface/suggestions/" class="md-nav__link">
0.2. 如何使用本书
0.2. &nbsp; 如何使用本书
</a>
</li>
@@ -314,7 +314,7 @@
<li class="md-nav__item">
<a href="../../chapter_preface/installation/" class="md-nav__link">
0.3. 编程环境安装
0.3. &nbsp; 编程环境安装
</a>
</li>
@@ -328,7 +328,7 @@
<li class="md-nav__item">
<a href="../../chapter_preface/contribution/" class="md-nav__link">
0.4. 一起参与创作
0.4. &nbsp; 一起参与创作
</a>
</li>
@@ -367,14 +367,14 @@
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
1. 引言
1. &nbsp; &nbsp; 引言
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
1. 引言
1. &nbsp; &nbsp; 引言
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -385,7 +385,7 @@
<li class="md-nav__item">
<a href="../../chapter_introduction/algorithms_are_everywhere/" class="md-nav__link">
1.1. 算法无处不在
1.1. &nbsp; 算法无处不在
</a>
</li>
@@ -399,7 +399,7 @@
<li class="md-nav__item">
<a href="../../chapter_introduction/what_is_dsa/" class="md-nav__link">
1.2. 算法是什么
1.2. &nbsp; 算法是什么
</a>
</li>
@@ -444,14 +444,14 @@
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
2. 计算复杂度
2. &nbsp; &nbsp; 计算复杂度
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
2. 计算复杂度
2. &nbsp; &nbsp; 计算复杂度
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -462,7 +462,7 @@
<li class="md-nav__item">
<a href="../../chapter_computational_complexity/performance_evaluation/" class="md-nav__link">
2.1. 算法效率评估
2.1. &nbsp; 算法效率评估
</a>
</li>
@@ -476,7 +476,7 @@
<li class="md-nav__item">
<a href="../../chapter_computational_complexity/time_complexity/" class="md-nav__link">
2.2. 时间复杂度
2.2. &nbsp; 时间复杂度
</a>
</li>
@@ -490,7 +490,7 @@
<li class="md-nav__item">
<a href="../../chapter_computational_complexity/space_complexity/" class="md-nav__link">
2.3. 空间复杂度
2.3. &nbsp; 空间复杂度
</a>
</li>
@@ -504,7 +504,7 @@
<li class="md-nav__item">
<a href="../../chapter_computational_complexity/space_time_tradeoff/" class="md-nav__link">
2.4. 权衡时间与空间
2.4. &nbsp; 权衡时间与空间
</a>
</li>
@@ -518,7 +518,7 @@
<li class="md-nav__item">
<a href="../../chapter_computational_complexity/summary/" class="md-nav__link">
2.5. 小结
2.5. &nbsp; 小结
</a>
</li>
@@ -559,14 +559,14 @@
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
3. 数据结构简介
3. &nbsp; &nbsp; 数据结构简介
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
3. 数据结构简介
3. &nbsp; &nbsp; 数据结构简介
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -577,7 +577,7 @@
<li class="md-nav__item">
<a href="../../chapter_data_structure/data_and_memory/" class="md-nav__link">
3.1. 数据与内存
3.1. &nbsp; 数据与内存
</a>
</li>
@@ -591,7 +591,7 @@
<li class="md-nav__item">
<a href="../../chapter_data_structure/classification_of_data_structure/" class="md-nav__link">
3.2. 数据结构分类
3.2. &nbsp; 数据结构分类
</a>
</li>
@@ -605,7 +605,7 @@
<li class="md-nav__item">
<a href="../../chapter_data_structure/summary/" class="md-nav__link">
3.3. 小结
3.3. &nbsp; 小结
</a>
</li>
@@ -648,14 +648,14 @@
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
4. 数组与链表
4. &nbsp; &nbsp; 数组与链表
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
4. 数组与链表
4. &nbsp; &nbsp; 数组与链表
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -666,7 +666,7 @@
<li class="md-nav__item">
<a href="../../chapter_array_and_linkedlist/array/" class="md-nav__link">
4.1. 数组(Array
4.1. &nbsp; 数组(Array
</a>
</li>
@@ -680,7 +680,7 @@
<li class="md-nav__item">
<a href="../../chapter_array_and_linkedlist/linked_list/" class="md-nav__link">
4.2. 链表(LinkedList
4.2. &nbsp; 链表(LinkedList
</a>
</li>
@@ -694,7 +694,7 @@
<li class="md-nav__item">
<a href="../../chapter_array_and_linkedlist/list/" class="md-nav__link">
4.3. 列表(List
4.3. &nbsp; 列表(List
</a>
</li>
@@ -708,7 +708,7 @@
<li class="md-nav__item">
<a href="../../chapter_array_and_linkedlist/summary/" class="md-nav__link">
4.4. 小结
4.4. &nbsp; 小结
</a>
</li>
@@ -751,14 +751,14 @@
<label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
5. 栈与队列
5. &nbsp; &nbsp; 栈与队列
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
5. 栈与队列
5. &nbsp; &nbsp; 栈与队列
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -769,7 +769,7 @@
<li class="md-nav__item">
<a href="../../chapter_stack_and_queue/stack/" class="md-nav__link">
5.1. 栈(Stack
5.1. &nbsp; 栈(Stack
</a>
</li>
@@ -783,7 +783,7 @@
<li class="md-nav__item">
<a href="../../chapter_stack_and_queue/queue/" class="md-nav__link">
5.2. 队列(Queue
5.2. &nbsp; 队列(Queue
</a>
</li>
@@ -797,7 +797,7 @@
<li class="md-nav__item">
<a href="../../chapter_stack_and_queue/deque/" class="md-nav__link">
5.3. 双向队列(Deque
5.3. &nbsp; 双向队列(Deque
</a>
</li>
@@ -811,7 +811,7 @@
<li class="md-nav__item">
<a href="../../chapter_stack_and_queue/summary/" class="md-nav__link">
5.4. 小结
5.4. &nbsp; 小结
</a>
</li>
@@ -852,14 +852,14 @@
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
6. 散列表
6. &nbsp; &nbsp; 散列表
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
6. 散列表
6. &nbsp; &nbsp; 散列表
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -870,7 +870,7 @@
<li class="md-nav__item">
<a href="../../chapter_hashing/hash_map/" class="md-nav__link">
6.1. 哈希表(HashMap
6.1. &nbsp; 哈希表(HashMap
</a>
</li>
@@ -884,7 +884,7 @@
<li class="md-nav__item">
<a href="../../chapter_hashing/hash_collision/" class="md-nav__link">
6.2. 哈希冲突处理
6.2. &nbsp; 哈希冲突处理
</a>
</li>
@@ -898,7 +898,7 @@
<li class="md-nav__item">
<a href="../../chapter_hashing/summary/" class="md-nav__link">
6.3. 小结
6.3. &nbsp; 小结
</a>
</li>
@@ -945,14 +945,14 @@
<label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="0">
7. 二叉树
7. &nbsp; &nbsp; 二叉树
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_8_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_8">
<span class="md-nav__icon md-icon"></span>
7. 二叉树
7. &nbsp; &nbsp; 二叉树
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -963,7 +963,7 @@
<li class="md-nav__item">
<a href="../binary_tree/" class="md-nav__link">
7.1. 二叉树(Binary Tree
7.1. &nbsp; 二叉树(Binary Tree
</a>
</li>
@@ -977,7 +977,7 @@
<li class="md-nav__item">
<a href="../binary_tree_traversal/" class="md-nav__link">
7.2. 二叉树遍历
7.2. &nbsp; 二叉树遍历
</a>
</li>
@@ -991,7 +991,7 @@
<li class="md-nav__item">
<a href="../binary_search_tree/" class="md-nav__link">
7.3. 二叉搜索树
7.3. &nbsp; 二叉搜索树
</a>
</li>
@@ -1005,7 +1005,7 @@
<li class="md-nav__item">
<a href="../avl_tree/" class="md-nav__link">
7.4. AVL 树 *
7.4. &nbsp; AVL 树 *
</a>
</li>
@@ -1028,7 +1028,7 @@
<a href="./" class="md-nav__link md-nav__link--active">
7.5. 小结
7.5. &nbsp; 小结
</a>
</li>
@@ -1066,14 +1066,14 @@
<label class="md-nav__link" for="__nav_9" id="__nav_9_label" tabindex="0">
8. 堆
8. &nbsp; &nbsp;
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_9_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_9">
<span class="md-nav__icon md-icon"></span>
8. 堆
8. &nbsp; &nbsp;
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -1084,7 +1084,7 @@
<li class="md-nav__item">
<a href="../../chapter_heap/heap/" class="md-nav__link">
8.1. 堆(Heap
8.1. &nbsp; 堆(Heap
</a>
</li>
@@ -1125,14 +1125,14 @@
<label class="md-nav__link" for="__nav_10" id="__nav_10_label" tabindex="0">
9. 图
9. &nbsp; &nbsp;
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_10_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_10">
<span class="md-nav__icon md-icon"></span>
9. 图
9. &nbsp; &nbsp;
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -1143,7 +1143,7 @@
<li class="md-nav__item">
<a href="../../chapter_graph/graph/" class="md-nav__link">
9.1. 图(Graph
9.1. &nbsp; 图(Graph
</a>
</li>
@@ -1157,7 +1157,7 @@
<li class="md-nav__item">
<a href="../../chapter_graph/graph_operations/" class="md-nav__link">
9.2. 图基础操作
9.2. &nbsp; 图基础操作
</a>
</li>
@@ -1171,7 +1171,7 @@
<li class="md-nav__item">
<a href="../../chapter_graph/graph_traversal/" class="md-nav__link">
9.3. 图的遍历
9.3. &nbsp; 图的遍历
</a>
</li>
@@ -1214,14 +1214,14 @@
<label class="md-nav__link" for="__nav_11" id="__nav_11_label" tabindex="0">
10. 查找算法
10. &nbsp; &nbsp; 查找算法
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_11_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_11">
<span class="md-nav__icon md-icon"></span>
10. 查找算法
10. &nbsp; &nbsp; 查找算法
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -1232,7 +1232,7 @@
<li class="md-nav__item">
<a href="../../chapter_searching/linear_search/" class="md-nav__link">
10.1. 线性查找
10.1. &nbsp; 线性查找
</a>
</li>
@@ -1246,7 +1246,7 @@
<li class="md-nav__item">
<a href="../../chapter_searching/binary_search/" class="md-nav__link">
10.2. 二分查找
10.2. &nbsp; 二分查找
</a>
</li>
@@ -1260,7 +1260,7 @@
<li class="md-nav__item">
<a href="../../chapter_searching/hashing_search/" class="md-nav__link">
10.3. 哈希查找
10.3. &nbsp; 哈希查找
</a>
</li>
@@ -1274,7 +1274,7 @@
<li class="md-nav__item">
<a href="../../chapter_searching/summary/" class="md-nav__link">
10.4. 小结
10.4. &nbsp; 小结
</a>
</li>
@@ -1321,14 +1321,14 @@
<label class="md-nav__link" for="__nav_12" id="__nav_12_label" tabindex="0">
11. 排序算法
11. &nbsp; &nbsp; 排序算法
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_12_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_12">
<span class="md-nav__icon md-icon"></span>
11. 排序算法
11. &nbsp; &nbsp; 排序算法
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -1339,7 +1339,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/intro_to_sort/" class="md-nav__link">
11.1. 排序简介
11.1. &nbsp; 排序简介
</a>
</li>
@@ -1353,7 +1353,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/bubble_sort/" class="md-nav__link">
11.2. 冒泡排序
11.2. &nbsp; 冒泡排序
</a>
</li>
@@ -1367,7 +1367,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/insertion_sort/" class="md-nav__link">
11.3. 插入排序
11.3. &nbsp; 插入排序
</a>
</li>
@@ -1381,7 +1381,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/quick_sort/" class="md-nav__link">
11.4. 快速排序
11.4. &nbsp; 快速排序
</a>
</li>
@@ -1395,7 +1395,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/merge_sort/" class="md-nav__link">
11.5. 归并排序
11.5. &nbsp; 归并排序
</a>
</li>
@@ -1409,7 +1409,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/summary/" class="md-nav__link">
11.6. 小结
11.6. &nbsp; 小结
</a>
</li>
@@ -1511,7 +1511,7 @@
<h1 id="75">7.5. 小结<a class="headerlink" href="#75" title="Permanent link">&para;</a></h1>
<h1 id="75">7.5. &nbsp; 小结<a class="headerlink" href="#75" title="Permanent link">&para;</a></h1>
<ul>
<li>二叉树是一种非线性数据结构,代表着“一分为二”的分治逻辑。二叉树的结点包含「值」和两个「指针」,分别指向左子结点和右子结点。</li>
<li>选定二叉树中某结点,将其左(右)子结点以下形成的树称为左(右)子树。</li>
@@ -1606,7 +1606,7 @@
<nav class="md-footer__inner md-grid" aria-label="页脚" >
<a href="../avl_tree/" class="md-footer__link md-footer__link--prev" aria-label="上一页: 7.4. AVL 树 *" rel="prev">
<a href="../avl_tree/" class="md-footer__link md-footer__link--prev" aria-label="上一页: 7.4. &amp;nbsp; AVL 树 *" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</div>
@@ -1615,20 +1615,20 @@
<span class="md-footer__direction">
上一页
</span>
7.4. AVL 树 *
7.4. &nbsp; AVL 树 *
</div>
</div>
</a>
<a href="../../chapter_heap/heap/" class="md-footer__link md-footer__link--next" aria-label="下一页: 8.1. 堆(Heap" rel="next">
<a href="../../chapter_heap/heap/" class="md-footer__link md-footer__link--next" aria-label="下一页: 8.1. &amp;nbsp; 堆(Heap" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
下一页
</span>
8.1. 堆(Heap
8.1. &nbsp; 堆(Heap
</div>
</div>
<div class="md-footer__button md-icon">