diff --git a/notes/算法.md b/notes/算法.md index 1bae9dcd..85480c53 100644 --- a/notes/算法.md +++ b/notes/算法.md @@ -963,15 +963,16 @@ public class BinarySearchST, Value> { **二叉树** 定义为一个空链接,或者是一个有左右两个链接的节点,每个链接都指向一颗子二叉树。 -

+

**二叉查找树** (BST)是一颗二叉树,并且每个节点的值都大于其左子树中的所有节点的值而小于右子树的所有节点的值。 -

+

-BST 有一个重要性质,就是它的前序遍历结果为递增排序。 +BST 有一个重要性质,就是它的前序遍历结果递增排序。 + +

-

基本数据结构: @@ -1029,7 +1030,7 @@ private Value get(Node x, Key key) { 当插入的键不存在于树中,需要创建一个新节点,并且更新上层节点的链接使得该节点正确链接到树中。 -

+

```java public void put(Key key, Value val) { @@ -1050,7 +1051,8 @@ private Node put(Node x, Key key, Value val) { 二叉查找树的算法运行时间取决于树的形状,而树的形状又取决于键被插入的先后顺序。最好的情况下树是完全平衡的,每条空链接和根节点的距离都为 logN。在最坏的情况下,树的高度为 N。 -

+

+ 复杂度:BST 查找和插入操作的平均时间复杂度为对数级别。 @@ -1061,8 +1063,7 @@ floor(key):小于等于键的最大键 - 如果键小于根节点的键,那么 floor(key) 一定在左子树中; - 如果键大于根节点的键,需要先判断右子树中是否存在 floor(key),如果存在就找到,否则根节点就是 floor(key)。 -

- +

```java public Key floor(Key key) { Node x = floor(root, key); @@ -1085,6 +1086,12 @@ private Node floor(Node x, Key key) { ### 5. rank() +rank(key) 返回 key 的排名。 + +- 如果键和根节点的键相等,返回左子树的节点数; +- 如果小于,递归计算在左子树中的排名; +- 如果大于,递归计算在右子树中的排名,并加上左子树的节点数,再加上 1(根节点)。 + ```java public int rank(Key key) { return rank(key, root); @@ -1111,7 +1118,7 @@ private Node min(Node x) { 令指向最小节点的链接指向最小节点的右子树。 -

+

```java public void deleteMin() { @@ -1127,9 +1134,10 @@ public Node deleteMin(Node x) { ### 8. delete() -如果待删除的节点只有一个子树,那么只需要让指向待删除节点的链接指向唯一的子树即可;否则,让右子树的最小节点替换该节点。 +- 如果待删除的节点只有一个子树,那么只需要让指向待删除节点的链接指向唯一的子树即可; +- 否则,让右子树的最小节点替换该节点。 -

+

```java public void delete(Key key) { @@ -1155,7 +1163,7 @@ private Node delete(Node x, Key key) { ### 9. keys() -利用二叉查找树中序遍历的结果为有序序列的特点。 +利用二叉查找树中序遍历的结果为递增的特点。 ```java public Iterable keys(Key lo, Key hi) { diff --git a/pics/0c723f4c-e13d-42f7-aeb2-1f160c7cc4b6.png b/pics/0c723f4c-e13d-42f7-aeb2-1f160c7cc4b6.png new file mode 100644 index 00000000..3252d0af Binary files /dev/null and b/pics/0c723f4c-e13d-42f7-aeb2-1f160c7cc4b6.png differ diff --git a/pics/0dd97d9e-7a38-460e-a2ac-3e4511145240.png b/pics/0dd97d9e-7a38-460e-a2ac-3e4511145240.png new file mode 100644 index 00000000..8a3e23d0 Binary files /dev/null and b/pics/0dd97d9e-7a38-460e-a2ac-3e4511145240.png differ diff --git a/pics/1c012d74-6b9d-4f25-a016-7ad4f1fdeee1.png b/pics/1c012d74-6b9d-4f25-a016-7ad4f1fdeee1.png new file mode 100644 index 00000000..0c959d2a Binary files /dev/null and b/pics/1c012d74-6b9d-4f25-a016-7ad4f1fdeee1.png differ diff --git a/pics/392fb173-9713-433c-b37b-ea63ba76eae4.png b/pics/392fb173-9713-433c-b37b-ea63ba76eae4.png new file mode 100644 index 00000000..6f3bbdbb Binary files /dev/null and b/pics/392fb173-9713-433c-b37b-ea63ba76eae4.png differ diff --git a/pics/3efca49f-eecf-41fc-83aa-6a4a95e025ea.png b/pics/3efca49f-eecf-41fc-83aa-6a4a95e025ea.png new file mode 100644 index 00000000..94f728b5 Binary files /dev/null and b/pics/3efca49f-eecf-41fc-83aa-6a4a95e025ea.png differ diff --git a/pics/5c0bb285-b917-446b-84a2-9810ee40d041.png b/pics/5c0bb285-b917-446b-84a2-9810ee40d041.png new file mode 100644 index 00000000..a064cc93 Binary files /dev/null and b/pics/5c0bb285-b917-446b-84a2-9810ee40d041.png differ diff --git a/pics/691e8da5-fa65-4ee0-a4a9-bd9adba945ff.jpg b/pics/691e8da5-fa65-4ee0-a4a9-bd9adba945ff.jpg new file mode 100644 index 00000000..e65a4083 Binary files /dev/null and b/pics/691e8da5-fa65-4ee0-a4a9-bd9adba945ff.jpg differ diff --git a/pics/78570a06-0781-4f9d-9093-70a8711785b5.jpg b/pics/78570a06-0781-4f9d-9093-70a8711785b5.jpg new file mode 100644 index 00000000..2aa55f8f Binary files /dev/null and b/pics/78570a06-0781-4f9d-9093-70a8711785b5.jpg differ