mirror of
https://github.com/krahets/hello-algo.git
synced 2024-12-25 13:26:30 +08:00
二叉搜索树: 排序小节 移动到 删除结点代码 的下面 (#340)
* 插入排序: 修改插入排序思想描述 * Update insertion_sort.md * 二叉搜索树: 排序小节 移动到 删除结点代码 的下面 * fix: 双点 -> 双向 --------- Co-authored-by: Yudong Jin <krahets@163.com>
This commit is contained in:
parent
94cba488ef
commit
4ee3af176b
2 changed files with 9 additions and 9 deletions
|
@ -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…
Reference in a new issue