简单说说二叉搜索树

目录:

  1. 什么是二叉搜索树
  2. 平衡二叉树
  3. 典型的平衡二叉树

1.什么是二叉搜索树

二叉树应该都不陌生,就像下面这副图展示的这样,是每个结点最多有两个子树的树结构

那么二叉搜索树就是以一颗二叉树来组织,但是又需要满足如下特性:

1.对于任何节点x,其左子树的关键字<=x.key<=其右子树的关键字
2.在新增和删除关键字时也要满足如上特性
复制代码

二叉搜索树如下图所示:

什么是二叉搜索树我们知道了,但是\color{red}{为什么需要使用二叉搜索树呢}

按照一般的有序查找,比如链表,查找时间应该是线性的,O(n);
那么二叉搜索树呢,其与树的高度成正比,平均查找时间为O(lgn);
复制代码

所以我们使用一颗搜索树,能够很大程度上节约查找时间,尤其是随着关键字的增多,效果越显著。

2.平衡二叉树

上面我们说到二叉搜索树,红黑书其实是它的变种,但是\color{red}{为什么需要平衡二叉树呢}

不得不说随机二叉搜索树的弊端,\color{red}{无法保证树构造的情况},比如:

如果如图中右侧所示,关键字来的顺序为(8, 10,11,12,13,15....),那么就会一直建立右侧子树,那么对于这颗二叉搜索树来说,其查找效率并没有比单纯的链表高,因为树高很高。
如果是左侧的构造方式,树高能保持一定的平衡,来保证查找效率。

3.典型的平衡二叉树

常用的有B树、红黑树、AVL等

3.1 AVL

 AVL是严格的二叉平衡树,平衡条件必须满足(所有节点的左右子树高度差不超过1);
 一旦不满足平衡,就需要进行调整
 由于维护这种高度平衡所付出的代价比从中获得的效率收益还大,故适用于插入删除不频繁,但查找要求较高的场合。
复制代码

3.2 红黑树

保证最坏的情况下基本动态集合操作的时间复杂度为O(lgn)
近似于平衡,要求没有AVL严格
有如下特性:
1.每个节点只能要么是红色的,要么是黑色的
2.根节点和叶子节点是黑色的
3.如果一个节点是红色的,则它的子节点必须都是黑色的
4.对每个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点。
5.更新删除新增操作也必须保证如上特性
复制代码

红黑树的应用非常广泛,比如C++的STL中,地图和集都是用红黑树实现的。

3.3 B树

《B树一点都不神秘》一文中已经详细介绍过B树;

为磁盘或者其他直接存储的辅助存储设备设计
类似于红黑树,但是更降低磁盘操作I/O
节点分为内部节点(非叶子节点)和叶子节点
节点可以不止一个关键字
假设节点中的关键字个数为n,则该节点的孩子数一定是n+1
.....
复制代码

B树与红黑树的不同之处在于B树的节点可以有很多孩子,从数个到数千个。所以B树的分支可以非常大; B树的高度也是O(lgn),但是呢,B树的严格高度要比红黑书的高度要小很多,因为B树可以有很大的分支因子,将树的高度拉低。


                                      其他相关章节
复制代码

算法相关文章之一:《简单说说二叉搜索树》
算法相关文章之二:《B树,一点都不神秘》
算法相关文章之三:《B树很简单,插入so easy》
算法相关文章之四:《什么是动态规划》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值