基于树的查找(二叉排序树、平衡二叉树、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)可以从根结点开始随机查找
关于伸展树、红黑树、以及平衡二叉树的删除、待更!
① 二叉排序树 ② 平衡二叉树 ③ 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)可以从根结点开始随机查找
关于伸展树、红黑树、以及平衡二叉树的删除、待更!
相关文章推荐
- 【转】B树、B-树、B+树、B*树、红黑树、 二叉排序树、trie树Double Array 字典查找树简介
- B树、B-树、B+树、B*树、红黑树rbtree 二叉排序树、trie树Double Array 字典查找树
- 二叉树,二叉查找书,平衡二叉树,红黑树,赫夫曼树,B-树和B+树
- B树、B-树、B+树、B*树、红黑树、 二叉排序树、trie树Double Array 字典查找树简介
- 树查找专题-二叉查找树、平衡二叉树、B+树、B-树、红黑树
- 二叉树,完全二叉树,满二叉树,二叉排序树,平衡二叉树,红黑树,B数,B-树,B+树,B*树(一)
- B树、B-树、B+树、B*树、红黑树、 二叉排序树、trie树Double Array 字典查找树简介
- 二叉树,完全二叉树,满二叉树,二叉排序树,平衡二叉树,红黑树,B数,B-树,B+树,B*树(二)
- 从二叉排序树到平衡二叉树再到红黑树系列3
- 二叉查找树,红黑树,AVL树,B~/B+树(B-tree),伸展树——优缺点及比较
- 二叉查找树,红黑树,AVL树,B~/B+树(B-tree),伸展树——优缺点及比较
- 从二叉排序树到平衡二叉树再到红黑树系列2
- 查找结构 动态查找树比较 树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree)
- 二叉查找树、平衡二叉树、红黑树、B-/B+树性能对比
- 数据结构中的树(红黑树,平衡二叉树,B树,B+树,B*树)
- 二叉树、红黑树、伸展树、B树、B+树
- 动态查找树比较: 二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree)
- 从二叉排序树到平衡二叉树再到红黑树系列1
- BST二叉排序树,AVL平衡二叉树,RBT红黑树,B-树,B+树,B*树
- 【Data_Structure笔记12】查找算法之【基于二叉排序树的查找】