mirror of
https://github.com/krahets/hello-algo.git
synced 2025-07-10 08:50:20 +08:00
deploy
This commit is contained in:
@ -25,7 +25,7 @@
|
||||
|
||||
|
||||
|
||||
<title>7.3. 二叉搜索树 - Hello 算法</title>
|
||||
<title>8.3. 二叉搜索树 - Hello 算法</title>
|
||||
|
||||
|
||||
|
||||
@ -79,7 +79,7 @@
|
||||
<div data-md-component="skip">
|
||||
|
||||
|
||||
<a href="#73" class="md-skip">
|
||||
<a href="#83" class="md-skip">
|
||||
跳转至
|
||||
</a>
|
||||
|
||||
@ -113,7 +113,7 @@
|
||||
<div class="md-header__topic" data-md-component="header-topic">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
7.3. 二叉搜索树
|
||||
8.3. 二叉搜索树
|
||||
|
||||
</span>
|
||||
</div>
|
||||
@ -441,8 +441,6 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
|
||||
@ -504,23 +502,9 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_computational_complexity/space_time_tradeoff/" class="md-nav__link">
|
||||
2.4. 权衡时间与空间
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_computational_complexity/summary/" class="md-nav__link">
|
||||
2.5. 小结
|
||||
2.4. 小结
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -847,21 +831,76 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
|
||||
6. 散列表
|
||||
6. 二分查找
|
||||
<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. 二分查找
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_binary_search/binary_search/" class="md-nav__link">
|
||||
6.1. 二分查找
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8" >
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="0">
|
||||
7. 散列表
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_8_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_8">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
7. 散列表
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
@ -872,7 +911,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_hashing/hash_map/" class="md-nav__link">
|
||||
6.1. 哈希表
|
||||
7.1. 哈希表
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -886,7 +925,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_hashing/hash_collision/" class="md-nav__link">
|
||||
6.2. 哈希冲突处理
|
||||
7.2. 哈希冲突处理
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -900,7 +939,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_hashing/summary/" class="md-nav__link">
|
||||
6.3. 小结
|
||||
7.3. 小结
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -930,7 +969,7 @@
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8" checked>
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_9" checked>
|
||||
|
||||
|
||||
|
||||
@ -946,15 +985,15 @@
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="0">
|
||||
7. 树
|
||||
<label class="md-nav__link" for="__nav_9" id="__nav_9_label" tabindex="0">
|
||||
8. 树
|
||||
<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">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_9_label" aria-expanded="true">
|
||||
<label class="md-nav__title" for="__nav_9">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
7. 树
|
||||
8. 树
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
@ -965,7 +1004,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../binary_tree/" class="md-nav__link">
|
||||
7.1. 二叉树
|
||||
8.1. 二叉树
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -979,7 +1018,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../binary_tree_traversal/" class="md-nav__link">
|
||||
7.2. 二叉树遍历
|
||||
8.2. 二叉树遍历
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1002,12 +1041,12 @@
|
||||
|
||||
|
||||
<label class="md-nav__link md-nav__link--active" for="__toc">
|
||||
7.3. 二叉搜索树
|
||||
8.3. 二叉搜索树
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<a href="./" class="md-nav__link md-nav__link--active">
|
||||
7.3. 二叉搜索树
|
||||
8.3. 二叉搜索树
|
||||
</a>
|
||||
|
||||
|
||||
@ -1026,11 +1065,11 @@
|
||||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#731" class="md-nav__link">
|
||||
7.3.1. 二叉搜索树的操作
|
||||
<a href="#831" class="md-nav__link">
|
||||
8.3.1. 二叉搜索树的操作
|
||||
</a>
|
||||
|
||||
<nav class="md-nav" aria-label="7.3.1. 二叉搜索树的操作">
|
||||
<nav class="md-nav" aria-label="8.3.1. 二叉搜索树的操作">
|
||||
<ul class="md-nav__list">
|
||||
|
||||
<li class="md-nav__item">
|
||||
@ -1067,22 +1106,15 @@
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#732" class="md-nav__link">
|
||||
7.3.2. 二叉搜索树的效率
|
||||
<a href="#832" class="md-nav__link">
|
||||
8.3.2. 二叉搜索树的效率
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#733" class="md-nav__link">
|
||||
7.3.3. 二叉搜索树的退化
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#734" class="md-nav__link">
|
||||
7.3.4. 二叉搜索树常见应用
|
||||
<a href="#833" class="md-nav__link">
|
||||
8.3.3. 二叉搜索树常见应用
|
||||
</a>
|
||||
|
||||
</li>
|
||||
@ -1103,7 +1135,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../avl_tree/" class="md-nav__link">
|
||||
7.4. AVL 树 *
|
||||
8.4. AVL 树 *
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1117,94 +1149,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../summary/" class="md-nav__link">
|
||||
7.5. 小结
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_9" >
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_9" id="__nav_9_label" tabindex="0">
|
||||
8. 堆
|
||||
<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. 堆
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_heap/heap/" class="md-nav__link">
|
||||
8.1. 堆
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_heap/build_heap/" class="md-nav__link">
|
||||
8.2. 建堆操作 *
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_heap/summary/" class="md-nav__link">
|
||||
8.3. 小结
|
||||
8.5. 小结
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1242,19 +1187,17 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_10" id="__nav_10_label" tabindex="0">
|
||||
9. 图
|
||||
9. 堆
|
||||
<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. 堆
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
@ -1264,8 +1207,8 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_graph/graph/" class="md-nav__link">
|
||||
9.1. 图
|
||||
<a href="../../chapter_heap/heap/" class="md-nav__link">
|
||||
9.1. 堆
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1278,8 +1221,8 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_graph/graph_operations/" class="md-nav__link">
|
||||
9.2. 图基础操作
|
||||
<a href="../../chapter_heap/build_heap/" class="md-nav__link">
|
||||
9.2. 建堆操作 *
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1292,22 +1235,8 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_graph/graph_traversal/" class="md-nav__link">
|
||||
9.3. 图的遍历
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_graph/summary/" class="md-nav__link">
|
||||
9.4. 小结
|
||||
<a href="../../chapter_heap/summary/" class="md-nav__link">
|
||||
9.3. 小结
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1350,14 +1279,14 @@
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_11" id="__nav_11_label" tabindex="0">
|
||||
10. 查找算法
|
||||
10. 图
|
||||
<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. 图
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
@ -1367,8 +1296,8 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_searching/linear_search/" class="md-nav__link">
|
||||
10.1. 线性查找
|
||||
<a href="../../chapter_graph/graph/" class="md-nav__link">
|
||||
10.1. 图
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1381,8 +1310,8 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_searching/binary_search/" class="md-nav__link">
|
||||
10.2. 二分查找
|
||||
<a href="../../chapter_graph/graph_operations/" class="md-nav__link">
|
||||
10.2. 图基础操作
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1395,8 +1324,8 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_searching/hashing_search/" class="md-nav__link">
|
||||
10.3. 哈希查找
|
||||
<a href="../../chapter_graph/graph_traversal/" class="md-nav__link">
|
||||
10.3. 图的遍历
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1409,7 +1338,7 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_searching/summary/" class="md-nav__link">
|
||||
<a href="../../chapter_graph/summary/" class="md-nav__link">
|
||||
10.4. 小结
|
||||
</a>
|
||||
</li>
|
||||
@ -1551,7 +1480,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_sorting/bucket_sort/" class="md-nav__link">
|
||||
11.6. 桶排序(New)
|
||||
11.6. 桶排序
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1565,7 +1494,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_sorting/counting_sort/" class="md-nav__link">
|
||||
11.7. 计数排序(New)
|
||||
11.7. 计数排序
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1579,7 +1508,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_sorting/radix_sort/" class="md-nav__link">
|
||||
11.8. 基数排序(New)
|
||||
11.8. 基数排序
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1627,17 +1556,21 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_13" id="__nav_13_label" tabindex="0">
|
||||
12. 回溯算法
|
||||
12. 搜索算法
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_13_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_13">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
12. 回溯算法
|
||||
12. 搜索算法
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
@ -1647,8 +1580,36 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_backtracking/backtracking_algorithm/" class="md-nav__link">
|
||||
12.1. 回溯算法(New)
|
||||
<a href="../../chapter_searching/searching_algorithm_revisited/" class="md-nav__link">
|
||||
12.1. 搜索算法(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_searching/replace_linear_by_hashing/" class="md-nav__link">
|
||||
12.2. 哈希优化策略
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_searching/summary/" class="md-nav__link">
|
||||
12.3. 小结
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1682,19 +1643,17 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_14" id="__nav_14_label" tabindex="0">
|
||||
13. 附录
|
||||
13. 回溯算法
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_14_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_14">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
13. 附录
|
||||
13. 回溯算法
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
@ -1704,22 +1663,8 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_appendix/installation/" class="md-nav__link">
|
||||
13.1. 编程环境安装
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_appendix/contribution/" class="md-nav__link">
|
||||
13.2. 一起参与创作
|
||||
<a href="../../chapter_backtracking/backtracking_algorithm/" class="md-nav__link">
|
||||
13.1. 回溯算法(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1752,6 +1697,77 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_15" id="__nav_15_label" tabindex="0">
|
||||
14. 附录
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_15_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_15">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
14. 附录
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_appendix/installation/" class="md-nav__link">
|
||||
14.1. 编程环境安装
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_appendix/contribution/" class="md-nav__link">
|
||||
14.2. 一起参与创作
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_16" >
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -1764,8 +1780,8 @@
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_15_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_15">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_16_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_16">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
参考文献
|
||||
</label>
|
||||
@ -1806,11 +1822,11 @@
|
||||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#731" class="md-nav__link">
|
||||
7.3.1. 二叉搜索树的操作
|
||||
<a href="#831" class="md-nav__link">
|
||||
8.3.1. 二叉搜索树的操作
|
||||
</a>
|
||||
|
||||
<nav class="md-nav" aria-label="7.3.1. 二叉搜索树的操作">
|
||||
<nav class="md-nav" aria-label="8.3.1. 二叉搜索树的操作">
|
||||
<ul class="md-nav__list">
|
||||
|
||||
<li class="md-nav__item">
|
||||
@ -1847,22 +1863,15 @@
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#732" class="md-nav__link">
|
||||
7.3.2. 二叉搜索树的效率
|
||||
<a href="#832" class="md-nav__link">
|
||||
8.3.2. 二叉搜索树的效率
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#733" class="md-nav__link">
|
||||
7.3.3. 二叉搜索树的退化
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#734" class="md-nav__link">
|
||||
7.3.4. 二叉搜索树常见应用
|
||||
<a href="#833" class="md-nav__link">
|
||||
8.3.3. 二叉搜索树常见应用
|
||||
</a>
|
||||
|
||||
</li>
|
||||
@ -1890,7 +1899,7 @@
|
||||
|
||||
|
||||
|
||||
<h1 id="73">7.3. 二叉搜索树<a class="headerlink" href="#73" title="Permanent link">¶</a></h1>
|
||||
<h1 id="83">8.3. 二叉搜索树<a class="headerlink" href="#83" title="Permanent link">¶</a></h1>
|
||||
<p>「二叉搜索树 Binary Search Tree」满足以下条件:</p>
|
||||
<ol>
|
||||
<li>对于根节点,左子树中所有节点的值 <span class="arithmatex">\(<\)</span> 根节点的值 <span class="arithmatex">\(<\)</span> 右子树中所有节点的值;</li>
|
||||
@ -1899,7 +1908,7 @@
|
||||
<p><img alt="二叉搜索树" src="../binary_search_tree.assets/binary_search_tree.png" /></p>
|
||||
<p align="center"> Fig. 二叉搜索树 </p>
|
||||
|
||||
<h2 id="731">7.3.1. 二叉搜索树的操作<a class="headerlink" href="#731" title="Permanent link">¶</a></h2>
|
||||
<h2 id="831">8.3.1. 二叉搜索树的操作<a class="headerlink" href="#831" title="Permanent link">¶</a></h2>
|
||||
<h3 id="_1">查找节点<a class="headerlink" href="#_1" title="Permanent link">¶</a></h3>
|
||||
<p>给定目标节点值 <code>num</code> ,可以根据二叉搜索树的性质来查找。我们声明一个节点 <code>cur</code> ,从二叉树的根节点 <code>root</code> 出发,循环比较节点值 <code>cur.val</code> 和 <code>num</code> 之间的大小关系</p>
|
||||
<ul>
|
||||
@ -2903,67 +2912,43 @@
|
||||
<p><img alt="二叉搜索树的中序遍历序列" src="../binary_search_tree.assets/bst_inorder_traversal.png" /></p>
|
||||
<p align="center"> Fig. 二叉搜索树的中序遍历序列 </p>
|
||||
|
||||
<h2 id="732">7.3.2. 二叉搜索树的效率<a class="headerlink" href="#732" title="Permanent link">¶</a></h2>
|
||||
<p>假设给定 <span class="arithmatex">\(n\)</span> 个数字,最常见的存储方式是「数组」。对于这串乱序的数字,常见操作的效率如下:</p>
|
||||
<ul>
|
||||
<li><strong>查找元素</strong>:由于数组是无序的,因此需要遍历数组来确定,使用 <span class="arithmatex">\(O(n)\)</span> 时间;</li>
|
||||
<li><strong>插入元素</strong>:只需将元素添加至数组尾部即可,使用 <span class="arithmatex">\(O(1)\)</span> 时间;</li>
|
||||
<li><strong>删除元素</strong>:先查找元素,使用 <span class="arithmatex">\(O(n)\)</span> 时间,再在数组中删除该元素,使用 <span class="arithmatex">\(O(n)\)</span> 时间;</li>
|
||||
<li><strong>获取最小 / 最大元素</strong>:需要遍历数组来确定,使用 <span class="arithmatex">\(O(n)\)</span> 时间;</li>
|
||||
</ul>
|
||||
<p>为了获得先验信息,我们可以预先将数组元素进行排序,得到一个「排序数组」。此时操作效率如下:</p>
|
||||
<ul>
|
||||
<li><strong>查找元素</strong>:由于数组已排序,可以使用二分查找,平均使用 <span class="arithmatex">\(O(\log n)\)</span> 时间;</li>
|
||||
<li><strong>插入元素</strong>:先查找插入位置,使用 <span class="arithmatex">\(O(\log n)\)</span> 时间,再插入到指定位置,使用 <span class="arithmatex">\(O(n)\)</span> 时间;</li>
|
||||
<li><strong>删除元素</strong>:先查找元素,使用 <span class="arithmatex">\(O(\log n)\)</span> 时间,再在数组中删除该元素,使用 <span class="arithmatex">\(O(n)\)</span> 时间;</li>
|
||||
<li><strong>获取最小 / 最大元素</strong>:数组头部和尾部元素即是最小和最大元素,使用 <span class="arithmatex">\(O(1)\)</span> 时间;</li>
|
||||
</ul>
|
||||
<p>观察可知,无序数组和有序数组中的各项操作的时间复杂度呈现“偏科”的特点,即有的快有的慢。<strong>然而,二叉搜索树的各项操作的时间复杂度都是对数阶,在数据量 <span class="arithmatex">\(n\)</span> 较大时具有显著优势</strong>。</p>
|
||||
<h2 id="832">8.3.2. 二叉搜索树的效率<a class="headerlink" href="#832" title="Permanent link">¶</a></h2>
|
||||
<p>给定一组数据,我们考虑使用数组或二叉搜索树存储。</p>
|
||||
<p>观察可知,二叉搜索树的各项操作的时间复杂度都是对数阶,具有稳定且高效的性能表现。只有在高频添加、低频查找删除的数据适用场景下,数组比二叉搜索树的效率更高。</p>
|
||||
<div class="center-table">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>无序数组</th>
|
||||
<th>有序数组</th>
|
||||
<th>二叉搜索树</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>查找指定元素</td>
|
||||
<td>查找元素</td>
|
||||
<td><span class="arithmatex">\(O(n)\)</span></td>
|
||||
<td><span class="arithmatex">\(O(\log n)\)</span></td>
|
||||
<td><span class="arithmatex">\(O(\log n)\)</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>插入元素</td>
|
||||
<td><span class="arithmatex">\(O(1)\)</span></td>
|
||||
<td><span class="arithmatex">\(O(n)\)</span></td>
|
||||
<td><span class="arithmatex">\(O(\log n)\)</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>删除元素</td>
|
||||
<td><span class="arithmatex">\(O(n)\)</span></td>
|
||||
<td><span class="arithmatex">\(O(n)\)</span></td>
|
||||
<td><span class="arithmatex">\(O(\log n)\)</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>获取最小 / 最大元素</td>
|
||||
<td><span class="arithmatex">\(O(n)\)</span></td>
|
||||
<td><span class="arithmatex">\(O(1)\)</span></td>
|
||||
<td><span class="arithmatex">\(O(\log n)\)</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<h2 id="733">7.3.3. 二叉搜索树的退化<a class="headerlink" href="#733" title="Permanent link">¶</a></h2>
|
||||
<p>在理想情况下,我们希望二叉搜索树是“平衡”的,这样就可以在 <span class="arithmatex">\(\log n\)</span> 轮循环内查找任意节点。</p>
|
||||
<p>在理想情况下,二叉搜索树是“平衡”的,这样就可以在 <span class="arithmatex">\(\log n\)</span> 轮循环内查找任意节点。</p>
|
||||
<p>然而,如果我们在二叉搜索树中不断地插入和删除节点,可能导致二叉树退化为链表,这时各种操作的时间复杂度也会退化为 <span class="arithmatex">\(O(n)\)</span> 。</p>
|
||||
<p><img alt="二叉搜索树的平衡与退化" src="../binary_search_tree.assets/bst_degradation.png" /></p>
|
||||
<p align="center"> Fig. 二叉搜索树的平衡与退化 </p>
|
||||
|
||||
<h2 id="734">7.3.4. 二叉搜索树常见应用<a class="headerlink" href="#734" title="Permanent link">¶</a></h2>
|
||||
<h2 id="833">8.3.3. 二叉搜索树常见应用<a class="headerlink" href="#833" title="Permanent link">¶</a></h2>
|
||||
<ul>
|
||||
<li>用作系统中的多级索引,实现高效的查找、插入、删除操作。</li>
|
||||
<li>作为某些搜索算法的底层数据结构。</li>
|
||||
@ -3046,7 +3031,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. &nbsp; 二叉树遍历" rel="prev">
|
||||
<a href="../binary_tree_traversal/" class="md-footer__link md-footer__link--prev" aria-label="上一页: 8.2. &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>
|
||||
@ -3055,20 +3040,20 @@
|
||||
上一页
|
||||
</span>
|
||||
<div class="md-ellipsis">
|
||||
7.2. 二叉树遍历
|
||||
8.2. 二叉树遍历
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
<a href="../avl_tree/" class="md-footer__link md-footer__link--next" aria-label="下一页: 7.4. &nbsp; AVL 树 *" rel="next">
|
||||
<a href="../avl_tree/" class="md-footer__link md-footer__link--next" aria-label="下一页: 8.4. &nbsp; AVL 树 *" rel="next">
|
||||
<div class="md-footer__title">
|
||||
<span class="md-footer__direction">
|
||||
下一页
|
||||
</span>
|
||||
<div class="md-ellipsis">
|
||||
7.4. AVL 树 *
|
||||
8.4. AVL 树 *
|
||||
</div>
|
||||
</div>
|
||||
<div class="md-footer__button md-icon">
|
||||
|
Reference in New Issue
Block a user