diff --git a/notes/算法.md b/notes/算法.md index 7833b198..1bae9dcd 100644 --- a/notes/算法.md +++ b/notes/算法.md @@ -963,11 +963,17 @@ public class BinarySearchST, Value> { **二叉树** 定义为一个空链接,或者是一个有左右两个链接的节点,每个链接都指向一颗子二叉树。 -**二叉查找树** (BST)是一颗二叉树,并且每个节点的键都大于其左子树中的任意节点的键而小于右子树的任意节点的键。 +

-

+**二叉查找树** (BST)是一颗二叉树,并且每个节点的值都大于其左子树中的所有节点的值而小于右子树的所有节点的值。 -二叉查找树的查找操作每次迭代都会让区间减少一半,和二分查找类似。 +

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

+ +基本数据结构: ```java public class BST, Value> { @@ -1000,7 +1006,11 @@ public class BST, Value> { ### 1. get() -如果树是空的,则查找未命中;如果被查找的键和根节点的键相等,查找命中,否则递归地在子树中查找:如果被查找的键较小就在左子树中查找,较大就在右子树中查找。 +- 如果树是空的,则查找未命中; +- 如果被查找的键和根节点的键相等,查找命中; +- 否则递归地在子树中查找:如果被查找的键较小就在左子树中查找,较大就在右子树中查找。 + +BST 的查找操作每次递归都会让区间减少一半,和二分查找类似,因此查找的复杂度为 O(logn)。 ```java public Value get(Key key) { @@ -1019,6 +1029,8 @@ private Value get(Node x, Key key) { 当插入的键不存在于树中,需要创建一个新节点,并且更新上层节点的链接使得该节点正确链接到树中。 +

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

+

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

```java public Key floor(Key key) { diff --git a/pics/20a9ec8c-0c19-4196-96f0-b4a0ea43075d.jpg b/pics/20a9ec8c-0c19-4196-96f0-b4a0ea43075d.jpg new file mode 100644 index 00000000..6b1a6900 Binary files /dev/null and b/pics/20a9ec8c-0c19-4196-96f0-b4a0ea43075d.jpg differ diff --git a/pics/5bbb64ff-bb9a-473e-ab53-8a26a394f813.jpg b/pics/5bbb64ff-bb9a-473e-ab53-8a26a394f813.jpg new file mode 100644 index 00000000..f5c7b17d Binary files /dev/null and b/pics/5bbb64ff-bb9a-473e-ab53-8a26a394f813.jpg differ diff --git a/pics/7e0b2961-2ffe-4a24-bef1-1b07a78af268.jpg b/pics/7e0b2961-2ffe-4a24-bef1-1b07a78af268.jpg new file mode 100644 index 00000000..fcc0e3e3 Binary files /dev/null and b/pics/7e0b2961-2ffe-4a24-bef1-1b07a78af268.jpg differ diff --git a/pics/a574c5c8-142d-4f6c-8fd7-8ca9b16b7546.png b/pics/a574c5c8-142d-4f6c-8fd7-8ca9b16b7546.png new file mode 100644 index 00000000..0b90bef5 Binary files /dev/null and b/pics/a574c5c8-142d-4f6c-8fd7-8ca9b16b7546.png differ diff --git a/pics/a9339620-4689-414f-8e26-19821039614a.jpg b/pics/a9339620-4689-414f-8e26-19821039614a.jpg new file mode 100644 index 00000000..a5c1634d Binary files /dev/null and b/pics/a9339620-4689-414f-8e26-19821039614a.jpg differ diff --git a/pics/dd137585-00bf-428e-8b88-475a8627e8bc.jpg b/pics/dd137585-00bf-428e-8b88-475a8627e8bc.jpg new file mode 100644 index 00000000..4bf55a05 Binary files /dev/null and b/pics/dd137585-00bf-428e-8b88-475a8627e8bc.jpg differ