5-2 二分搜索树基础
来源:互联网 发布:科比04年总决赛数据 编辑:程序博客网 时间:2024/06/03 06:25
二分搜索树这个数据结构的提出,是自来于“查找表”或者说“字典”这种数据结构的。
实现查找表,可以通过“普通数组”“顺序数组”“二分搜索树”来实现。其中,最有效的方式就是实现二分搜索树。
图:普通数组、顺序数组、二分搜索树对查找、插入、删除元素的时间复杂度分析
对于上表的说明:
普通数组的插入操作:要先查找有没有这个元素,然后插入或者覆盖。
普通数组的删除操作:要先查找有没有这个元素,然后删除或者什么都不做。
顺序数组的查找操作:可以使用二分查找法,二分查找法的时间复杂度就是 O(logn)。
二分搜索树的特点
二分搜索树的最大特性是:高效。不仅可以用于查找数据,还可以高效地插入、删除。但是二分搜索树的重要意义还在于动态地维护数据(这一点和堆很像)。这一点要等待我们这一章学习完成以后细细地体会。
借助二分搜索树这个数据结构,我们可以轻松地实现以下函数:min、max、floor、ceil、rank、select。即二分搜索树还可以回答很多数据之间的关系的问题。
查一查:二分搜索树(Binary Search Tree)的定义
。
二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树:
1、每个结点都有一个作为搜索依据的关键码(key),所有结点的关键码互不相同;
2、左子树(如果非空)上所有结点的关键码都小于根结点的关键码;
3、右子树(如果非空)上所有结点的关键码都大于根结点的关键码;
4、左子树和右子树也是二叉搜索树;
5、结点左子树上所有关键码小于结点关键码;
6、结点右子树上所有关键码大于结点关键码;
7、若从根结点到某个叶结点有一条路径,路径左边的结点的关键码不一定小于路径上的结点的关键码。
8、如果对一棵二叉搜索树进行中序遍历,可以按从小到大的顺序,将各结点关键码排列起来,所以也称二叉搜索树为二叉排序树。
每个节点的键值大于左孩子;
每个节点的键值小于右孩子;以左右孩子为根的子树仍为二分搜索树。
性质:
1、大于每一个左节点
2、小于每一个右节点
二分搜索树的定义的天然地包括了递归的思想。尤其,我们还要注意到,二分搜索树不一定是完全二叉树。
下面是一个二分搜索树的基本实现:
public class BST { // 就一个根节点 private Node root; private int count; public BST(){ root = null; count = 0; } public int size() { return count; } public boolean isEmpty() { return count == 0; } class Node { private int key; private int value; private Node left; private Node right; public Node(int key, int value) { this.key = key; this.value = value; this.left = null; this.right = null; } }}
- 5-2 二分搜索树基础
- 【基础算法】搜索-二分搜索
- 二分搜索树的基础结构
- 基础...二分搜索
- 5-10 二分搜索树的局限性
- 最优二分搜索树
- 最优二分搜索树
- 二分搜索树
- 二分搜索树
- 二分搜索树--完整版
- 二分搜索树
- 二分搜索树(一)
- 二分搜索树(二)
- BST二分搜索树
- 二分搜索树
- 二分搜索(2)
- 二分搜索(2)
- 二分查找法与二分搜索树
- 手游服务器开发的那点事-基本功能点
- linux内核驱动---创建设备节点文件
- 5-1 二分查找法
- IR2101驱动
- River Hopscotch
- 5-2 二分搜索树基础
- 链表是否有环
- 重写equals 和 hashCode
- Sourcetree的分支创建与合并
- 手写体数字识别(二) 训练图片提取 文档
- 第三周项目1
- XCode代码格式化插件
- Centos7.3安装和配置Mysql5.7
- 算法设计与复杂性理论 第一次上机 仙岛求药