您的位置:首页 > 其它

基于树的查找(二叉排序树、平衡二叉树、B树、B+树、伸展树和红黑树)

2016-08-05 15:49 447 查看
本文主要介绍几种比较重要的树形结构:

① 二叉排序树 ② 平衡二叉树 ③ B树 ④ B+树

⑤ 伸展树 ⑥ 红黑树

分为三个问题来描述每种树:

① 是什么?主要应用? ② 有什么特点(性质)? ③ 基于它的操作?

Ⅰ 二叉排序树(BST):

二叉排序树又称为二叉查找树,是一种高效的数据结构。是一种特殊的二叉树。



特点(性质):



注意:要先判断题目给定的二叉排序树是否为空树!

二叉排序树采用二叉链表作为存储结构:



二叉链表分为3个域:左孩子、右孩子和数据域。

基于二叉排序树的算法:



详细解释以及需要注意的地方:

关于比较复杂的删除的最后一种情况,也就是待删结点既有左子树又有右子树的情况:

(1)中序遍历,找出待删结点的直接前驱和直接后继结点。

(2)可以用前驱结点和后继结点中的任何一个来替换待删结点。

(3)过程是先将待删结点换成前驱(后继)结点,再将原来前驱(后继)结点删除,删除的过程转化成了较简单的前两种情况。

性能分析:动态查找效率高



Ⅱ 平衡二叉树 (AVL):

由于二叉排序树的结点分布不均衡,导致会出现最坏时间复杂度,所以经过改进产生平衡二叉树。平衡二叉树不受输入序列和插入结点的影响,始终保持平衡状态。

平衡因子:BF( Node) 表示结点的平衡因子

BF( Node) = Node的右子树高度 - Node的左子树高度 。





如图,是一个AVL的例子,其中圆圈里边的数字代表BF,外边的数字代表Node真正的值。有n个结点,树的高度为

,时间复杂度为



当经过插入或者删除操作破坏了平衡二叉树的平衡之后,需要通过一系列操作来调整使其依旧保持平衡。



1.LL型详解:







同上,对于RL类型,采用相同的分析方法,不同之处在于RL类型先顺时针旋转,再逆时针旋转。

在从0创建平衡二叉树的过程中,基于插入算法,判断是哪种插入类型的时候是根据 | BF(Node) |=2的结点来判断的。

平衡二叉树的删除比较麻烦,待更。

Ⅲ B树

B树不是二叉树而是树,是一种多路平衡查找树,即树的分支多于二叉且所有叶子结点在同一层上。B树在文件系统和数据库系统中使用较多,适用于组织动态的索引结构。

用m来表示B树的阶,即所有结点中拥有孩子最多的那个结点的孩子总数。



以上是一个B树的例子,在上图中,蓝色框体中标记的数字表示含有元素的个数。



综上可得:整个B树可以看成一个递增序列,结点左边的数一定小于结点本身,结点右边的数一定大于结点本身。



关于key在叶子结点,直接删的过程,又分为三种情况。



旋转指的是,将待删的结点删除后,取右兄弟结点最小值上移,将原父结点放在已删结点的位置,即逆时针旋转。或者将左兄弟节点的最大值上移,将原父结点放在已删结点的位置,即顺时针旋转。

Ⅳ B+树

B树的变种,应用在多种文件系统中。



上图表示简单的B+树,从图中可以看出,所有的关键字都会出现在叶子结点中,上层关键字是下层最大值的复写(也可以是最小值的复写)。

查找的方法:

(1)可以从最小关键字起按顺序查找

(2)可以从根结点开始随机查找

关于伸展树、红黑树、以及平衡二叉树的删除、待更!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐