二叉搜索树: 排序小节 移动到 删除结点代码 的下面 (#340)

* 插入排序: 修改插入排序思想描述

* Update insertion_sort.md

* 二叉搜索树: 排序小节 移动到 删除结点代码 的下面

* fix: 双点 -> 双向

---------

Co-authored-by: Yudong Jin <krahets@163.com>
This commit is contained in:
方圆 2023-02-06 19:57:19 +08:00 committed by GitHub
parent 94cba488ef
commit 4ee3af176b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 9 additions and 9 deletions

View file

@ -144,7 +144,7 @@ public class linkedlist_deque {
deque.pushLast(3); deque.pushLast(3);
deque.pushLast(2); deque.pushLast(2);
deque.pushLast(5); deque.pushLast(5);
System.out.print("队列 deque = "); System.out.print("队列 deque = ");
deque.print(); deque.print();
/* 访问元素 */ /* 访问元素 */

View file

@ -531,14 +531,6 @@ comments: true
删除结点操作也使用 $O(\log n)$ 时间,其中查找待删除结点 $O(\log n)$ ,获取中序遍历后继结点 $O(\log n)$ 。 删除结点操作也使用 $O(\log n)$ 时间,其中查找待删除结点 $O(\log n)$ ,获取中序遍历后继结点 $O(\log n)$ 。
### 排序
我们知道,「中序遍历」遵循“左 $\rightarrow$ 根 $\rightarrow$ 右”的遍历优先级,而二叉搜索树遵循“左子结点 $<$ 根结点 $<$ 右子结点”的大小关系。因此,在二叉搜索树中进行中序遍历时,总是会优先遍历下一个最小结点,从而得出一条重要性质:**二叉搜索树的中序遍历序列是升序的**。
借助中序遍历升序的性质,我们在二叉搜索树中获取有序数据仅需 $O(n)$ 时间,而无需额外排序,非常高效。
![bst_inorder_traversal](binary_search_tree.assets/bst_inorder_traversal.png)
=== "Java" === "Java"
```java title="binary_search_tree.java" ```java title="binary_search_tree.java"
@ -1040,6 +1032,14 @@ comments: true
``` ```
### 排序
我们知道,「中序遍历」遵循“左 $\rightarrow$ 根 $\rightarrow$ 右”的遍历优先级,而二叉搜索树遵循“左子结点 $<$ 根结点 $<$ 右子结点”的大小关系。因此,在二叉搜索树中进行中序遍历时,总是会优先遍历下一个最小结点,从而得出一条重要性质:**二叉搜索树的中序遍历序列是升序的**。
借助中序遍历升序的性质,我们在二叉搜索树中获取有序数据仅需 $O(n)$ 时间,而无需额外排序,非常高效。
![bst_inorder_traversal](binary_search_tree.assets/bst_inorder_traversal.png)
## 7.3.2. 二叉搜索树的效率 ## 7.3.2. 二叉搜索树的效率
假设给定 $n$ 个数字,最常用的存储方式是「数组」,那么对于这串乱序的数字,常见操作的效率为: 假设给定 $n$ 个数字,最常用的存储方式是「数组」,那么对于这串乱序的数字,常见操作的效率为: