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

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

* Update insertion_sort.md

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

* fix: 双点 -> 双向

---------

Co-authored-by: Yudong Jin <krahets@163.com>
pull/343/head
方圆 2 years ago committed by GitHub
parent 94cba488ef
commit 4ee3af176b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

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

@ -531,14 +531,6 @@ comments: true
删除结点操作也使用 $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 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. 二叉搜索树的效率
假设给定 $n$ 个数字,最常用的存储方式是「数组」,那么对于这串乱序的数字,常见操作的效率为:

Loading…
Cancel
Save