数据结构—04:树

一、二叉排序(查找)树

  1. 若左子树非空,则左子树上所有结点的值均小于根结点的值
  2. 若右子树非空,则右子树上所有结点的值均大于根结点的值
  3. 它的左、右子树也分别是二叉排序树

 


二、AVL树

平衡二叉树,是自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为1,所以它也被称为高度平衡树。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。

  1. 它是一棵空树 或 它的左、右两个子树的高度差的绝对值不超过 1;
  2. 左右两个子树都是一棵平衡二叉树。

 


三、B 树

B-Tree(Balance Tree),也就是平衡树,是一种平衡多叉树。一个节点就是一个磁盘块。

主要特性:

  1. 每个结点最多m个子结点。

  2. 除了根结点和叶子结点外,每个结点最少有m/2(向上取整)个子结点。

  3. 如果根结点不是叶子结点,那根结点至少包含两个子结点。

  4. 所有的叶子结点都位于同一层。

  5. 每个结点都包含k个元素(关键字),这里m/2≤k<m,这里m/2向下取整。

  6. 每个元素(关键字)左结点的值,都小于或等于该元素(关键字)。

  7. 右结点的值都大于或等于该元素(关键字)。

查找:从根结点开始,对结点内的关键字(有序)序列进行二分查找。查询所经过的结点数量要少很多,意味着更少的磁盘IO。

插入:在插入结点时,如果结点已满,需要将结点分裂为两个各占M/2的结点;

删除:删除结点时,需将两个不足M/2的兄弟结点合并;

 


四、B+ 树

B+Tree是在B树基础上的一种优化,是基于 B-Tree 和叶子节点顺序访问指针进行实现,它具有 B-Tree 的平衡性,并且通过顺序访问指针来提高区间查询的性能。

通常用用于数据库操作系统的文件系统中。B+ 树的特点是能够保持数据稳定有序,其插入与修改拥有较稳定的对数时间复杂度。B+ 树元素自底向上插入,这与二叉树恰好相反。

主要特性:

  1. 所有叶子结点之间都有一个链指针;
  2. 所有叶子结点中包含了全部元素信息(key和data);
  3. 所有非叶子结点只存储key;
  4. 所有的data都存储在叶子结点中。

查找:与B树也基本相同,区别是B+树只有达到叶子结点才命中(B-树可以在非叶子结点命中)。进行查找操作时,首先在根节点进行二分查找,找到一个 key 所在的指针,然后递归地在指针所指向的结点进行查找。直到查找到叶子节点,然后在叶子节点上进行二分查找,找出 key 所对应的 data。

插入、删除:会破坏平衡树的平衡性,因此在插入删除操作之后,需要对树进行一个分裂、合并、旋转等操作来维护平衡性。

 


五、B*树

是B+ 树的变体,在B+ 树的非根和非叶子结点再增加指向兄弟的指针

B*树的分裂:当一个结点满时,如果它的下一个兄弟结点未满,那么将一部分数据移到兄弟结点中,再在原结点插入关键字,最后修改父结点中兄弟结点的关键字(因为兄弟结点的关键字范围改变了);如果兄弟也满了,则在原结点与兄弟结点之间增加新结点,并各复制1/3的数据到新结点,最后在父结点增加新结点的指针。

 

 


六、红黑树

一种二叉查找树,但在每个节点增加一个存储位表示节点的颜色,可以是red或black。

 通过对任何一条从根到叶子的路径上各个节点着色的方式的限制,红黑树确保没有一条路径会比其它路径长出两倍。它是一种弱平衡二叉树(由于是弱平衡,可以推出,相同的节点情况下,AVL树的高度低于红黑树),相对于要求严格的AVL树来说,它的旋转次数变少,所以对于搜索、插入、删除操作多的情况下,我们就用红黑树。

  1. 结点非红即黑;
  2. 根节点是黑色;
  3. 所有 NULL 结点称为叶子节点,且认为颜色为黑;
  4. 所有红节点的子结点都为黑色;
  5. 从任一结点到其叶子节点的所有路径上都包含相同数目的黑结点。

 

 


小结

       二叉搜索树:二叉树,每个结点只存储一个关键字,等于则命中,小于走左结点,大于走右结点;

       B树:多路搜索树,每个结点存储M/2到M个关键字,非叶子结点存储指向关键字范围的子结点;所有关键字在整颗树中出现,且只出现一次,非叶子结点可以命中;

       B+树:在B-树基础上,为叶子结点增加链表指针,所有关键字都在叶子结点中出现,非叶子结点作为叶子结点的索引;B+树总是到叶子结点才命中;

       B*树:在B+树基础上,为非叶子结点也增加链表指针,将结点的最低利用率从1/2提高到2/3;

 

 


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值