二叉排序树(BST)的概述
二叉排序树是如何提出的?
-
我们来看一个需求: “给你一个数列{7 , 3 , 10 , 12 , 5 , 1 , 9}”, 要求: 能够高效的完成对数据的查询和添加
-
以前的时候我们实现这种需求肯定是两种方式:
①使用数组:- 不对数组排序:
- 优点: 直接在数组尾部添加即可, 速度快
- 缺点: 查照速度慢
- 如果是无需数组我们查找就要进行一个遍历, 或者是先排序之后再进行查找
- 对数组排序
- 优点: 可以使用二分查找等查找算法, 查找速度快
- 缺点: 为了保证数组有序, 每次添加元素的时候都要先找到插入位置,找到插入位置之后数组后续位置的元素必须要后移之后才能插入, 速度慢
②使用链表:
- 优点: 添加数据速度要比数组快(我们可以创建一个虚拟头结点, 每次添加数据的时候都将数据添加到虚拟头结点的下一个位置即可)
- 缺点: 不管链表是否有序, 查找的效率都很低(因为我们要从头结点开始遍历一遍)
- 不对数组排序:
-
但是我们现在有了第三种更加好的方式:
③使用树结构
- 能够提高数据存储, 查找的效率, (比如利用二叉排序树(BinarySortTree)), 既可以保证数据的查找速度, 又可以保证数据的插入, 删除, 修改的速度
-
二叉排序树的介绍:
二叉排序树: BST(Binary Sort Tree), 也称之为: 二分搜索树(Binary Search Tree)
对于二叉排序树的任何一个非叶子结点,要求左子节点的值都要比当前值小, 右子节点的值比当前节点的值大
- 注意: 如果有相同的值, 可以将该相同的值放到左子节点或者是右子节点上
- 注意: 如果构建的时候将相同的值放到了右子节点上, 那么我们后面做删除结点操作或者是其他操作的时候判断如果出现了结点值相同的情况的时候就要也去右子树上去找
二叉排序树(图解)
- 比如针对开始的时候我们给出的需求中的数据{7 , 3 , 10 , 12 , 5 , 1 , 9}创建的二叉排序树如下: