树结构

1、AVL树

自平衡二叉搜索树,新节点加进去后,树结构自动调整成平衡的。AVL树左右两侧高度差要小于等于1。

2、红黑树

自平衡二叉搜索树,新节点加进去后,树结构会通过变色、左旋或右旋来调整成平衡的。红黑树左右两侧的数据左边都比节点值小,右边都比节点值大,便于查询。

红黑树的主要规则:

——根节点是黑色的;

——一个红色节点的两个子节点都是黑色的;

——一个节点到它下面的所有叶节点中间,黑色节点的数量都是固定的。

为了维持这个规则,红黑树采用变色、左旋、右旋来处理。

变色:红色变黑色,黑色变红色;

左旋:节点的右子节点变成父节点,该节点变成这个父节点的左子节点

右旋:节点的左子节点变成父节点,该节点变成这个父节点的右子节点

3、红黑树与AVL树区别

两种树都是自平衡的二叉查找树,都是为了解决二叉树可能存在的高度太高的问题。

AVL树在高度上更严格一点,高度差小于等于1,这样查找效率就高了,但是插入或删除的时候,就需要经过多次的自平衡旋转,这样插入效率就不那么高了。

红黑树在高度上不是那么严格,但是也要求高度差小于等于2,通过牺牲高度差,保证3次之内完成自平衡,这样插入效率就提高了,查找效率也不会太低,是一种折中的方案。

4、B树

4阶B树中每个节点都可以有3个子节点,且每个节点都可以有3个元素的key,保证左右两侧数据左右都比节点值小,右边都比节点值大,且左右两侧节点的Key数量保持一致。

B树中离根节点近的数据元素,可以很快被查询到,且内部节点都有数据,不用到叶节点才能找到数据。

5、B+树

B树的升级版本,除了叶节点的内部节点,数据都只存Key,不存value,作为找寻叶节点数据的导航。在叶节点,我们存储所有的数据的key和value,并且所有叶节点的数据构成有序链表。

B+树中我们可以快速定位数据元素的位置,进行查询,且遍历数据元素不需要经过树的节点,因为B+树有有序链表。

B+树主要用于文件系统。

6、B树和B+树区别

B树和B+树的区别如下 :

B树所有节点都存key和data,B+树只有叶子节点才存key和data,其它节点只存key;

B+树叶子节点之间有顺序访问的指针,方便顺序访问,B树没有。


B+树之所以适用用来做数据库的索引存储,主要有三点原因:

又矮又胖:高度越低,IO操作的次数就越少,索引查找的效率就越高;

非叶子节点不存data:内节点不放data,这样内存页可以放的key就更多。

顺序访问指针:数据节点之间有指针,便于遍历。

你可能感兴趣的:(树结构)