二叉搜索树

  • 二叉搜索树
  • 平衡二叉树
  • 红黑树
  • B树
  • B+树

二叉搜索树

二叉排序树定义:
二叉排序树或者是空树或者是满足以下条件:
1)若它的左子树不空,则左子树上的所有关键字小于根关键字的值
2)若它的右子树不空,则右子树上的所有关键字大于根关键字的值
3)左右子树又各是二叉排序树
二叉排序树又叫二叉搜索树,二叉查找树
优点:可以非常方便地对树中所有节点进行排序和检索,结合了链表和数组的优点
缺点:二叉搜索树,最差情况下,会变成链表的形式,退化成线性时间,复杂度为n,检索效率变差。
例如插入时,记录有序,则构建的二叉搜索树变成普通的链表,或者由于插入删除操作,二叉排序树会变成链表。
由于二叉搜索树的查找性能取决于树的高度,为了获得更高的查找效率,平衡二叉树对二叉排序树的高度进行控制,来提高检索效率。

平衡二叉树

平衡二叉树定义(AVL):
AVL树或者是一棵空树或者是具有下列性质的非空二叉查找树:
(1) 任一结点的左、右子树均为AVL树
(2) 根结点左、右子树高度差绝对值不超过1
平衡二叉树为了防止二叉搜索树退化成链表,在每次插入删除后,对二叉平衡树进行旋转,使之平衡。
缺点:插入删除操作,需要进行旋转操作

红黑树

红黑树定义:
平衡二叉树的一种, 一种自平衡二叉查找树,在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能
优点:红黑树能够以O(log2(N))的时间复杂度进行搜索、插入、删除操作。此外,任何不平衡都会在3次旋转之内解决
性质:
1. 节点是红色或黑色。
2. 根节点是黑色。
3.所有叶子都是黑色。(叶子是NIL节点)
4. 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
5… 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
场景:java中的set和map

B树

B树定义:
可以理解为一种平衡多路查找树,相对于平衡二叉树,每个节点包含的关键字不止一个,把树的节点关键字增多后树的层级比原来的二叉树少了,减少数据查找的次数和复杂度。
特点:
1.一个节点多个元素
2.节点有序
场景: 多用于文件系统,因为文件存储在硬盘,一般情况下比较大,无法一次加载到内存,可以通过每次加载B树的一个节点往下查找。

B+树

B+树是B树的改进,非叶子节点不存储记录,从而每个节点可以存储更多的关键字,进一步降低树的层级,增加查找效率 。
性质:
1.B+树的非叶子节点不保存关键字记录的指针,每个节点能保存的关键字大大增加,降低树的层级
2.B+树的根节点关键字的个数和子节点的数量相等
3.B+树的非叶子节点只进行索引,关键字记录指针都保存在叶子节点,所以每次查找记录的路径高度是一样的, 查询比较稳定
4.B+树的叶子节点从小到大通过指针链接 ,(特别适合数据库的区间查询)
特点:
1.一个节点多个元素
2.节点有序
3.非叶子节点在叶子节点冗余
4.叶子节点有指针链接

优点:每个叶子节点的存储的关键字更多,降低树的层级,查找效率提高,同时所有的记录指针都保存在叶子节点,因此查找速度相对稳定。

(来自网络截图)
B+树在mysql中的应用

(来自网络截图)

mysql中的B+树的叶子节点的指针是双向的
场景:多用于数据库的索引,数据库中的查询经常是连续的多条记录,如果是B树可能需要做中序遍历,跨层访问,而在B+树中,记录都保存在叶子节点且有指针相连
补充:数据库中的索引还有另一种存储方式hash存储,hash存储适合查询单条数据,如果是多条数据用B+树可以一次通过指针全部查到。数据索引一般存储在硬盘,量大的话,B+树允许分批载入内存,树的高度也比较低,查询效率较高。

二叉搜索树,二叉平衡术,红黑树,B树,B+树相关推荐

  1. php实现二叉搜索树,二叉搜索树有几种实现方式

    二叉搜索树有一种实现方式,就是用链表实现,而链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的,且链表是由一系列结点组成,结点可以在运行时动态生成. ...

  2. 为什么HashMap使用红黑树而不使用AVL树

    在Jdk1.8版本后,Java对HashMap做了改进,在链表长度大于8的时候,将后面的数据存在红黑树中,以加快检索速度. 那么很多人就有疑问为什么是使用红黑树而不是AVL树,AVL树是完全平衡二叉树 ...

  3. 遍历HashMap源码——红黑树原理、HashMap红黑树实现与反树型化(三)

    本章将是HashMap源码的最后一章,将介绍红黑树及其实现,HashMap的remove方法与反树型化.长文预警~~ 遍历HashMap源码--红黑树原理.HashMap红黑树实现与反树型化 什么是红 ...

  4. 面试题:为什么用红黑树不用普通的AVL树

    在Jdk1.8版本后,Java对HashMap做了改进,在链表长度大于8的时候,将后面的数据由链表改为了存在红黑树中,以加快检索速度. 有疑问为什么是使用红黑树而不是AVL树,AVL树是完全平衡二叉树 ...

  5. 数据结构之二叉搜索树/二叉查找数/有序二叉树/排序二叉树

    概念~ 二叉查找树(英语:Binary Search Tree),也称二叉搜索树.有序二叉树(英语:ordered binary tree),排序二叉树(英语:sorted binary tree), ...

  6. 72. Leetcode 99. 恢复二叉搜索树 (二叉搜索树-中序遍历类)

    给你二叉搜索树的根节点 root ,该树中的 恰好 两个节点的值被错误地交换.请在不改变其结构的情况下,恢复这棵树 .示例 1:输入:root = [1,3,null,null,2] 输出:[3,1, ...

  7. 68. Leetcode 669. 修剪二叉搜索树 (二叉搜索树-基本操作类)

    给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high.通过修剪二叉搜索树,使得所有节点的值在[low, high]中.修剪树 不应该 改变保留在树中的元素的相对结构 (即, ...

  8. b - 数据结构实验之查找二:平衡二叉树_二叉树、平衡二叉树、红黑树、B树、B+树与B*树...

    一.二叉树 1️⃣二叉查找树的特点就是左子树的节点值比父亲节点小,而右子树的节点值比父亲节点大,如图: 基于二叉查找树的这种特点,在查找某个节点的时候,可以采取类似于二分查找的思想,快速找到某个节点. ...

  9. B树,B+树,红黑树应用场景AVL树,红黑树,B树,B+树,Trie树

    B B+运用在file system database这类持续存储结构,同样能保持lon(n)的插入与查询,也需要额外的平衡调节.像mysql的数据库定义是可以指定B+ 索引还是hash索引. C++ ...

  10. 为什么HashMap使用红黑树而不是AVL树或者B+树

    红黑树和AVL树都是最常用的平衡二叉搜索树. 但是,两者之间有些许不同: AVL树更加严格平衡,因此可以提供更快的査找效果.因此,对于查找密集型任务使用AVL树没毛病. 但是对于插入密集型任务,红黑树 ...

最新文章

  1. Bypass WAF:Burp插件绕过一些WAF设备
  2. win10安装Navicat 12 for MySQL
  3. 集合计数 (容斥原理)
  4. as的使用技巧及注意点
  5. java蓝桥杯算法训练 奇偶判断
  6. redis 异常解决办法
  7. 计算机网络实践报告--网络安全
  8. java 数字转大写_数字转大写(java)
  9. html没有写font标签却出现font标签解决方案
  10. nginx(二十七)长连接和短连接
  11. 【风马一族_php】NO3_php基础知识
  12. 多款国产手机无一幸免:人脸识别被破解
  13. 模型的评估指标(一)
  14. 精美viso制图(1)
  15. Docker学习笔记八:删除镜像构建私有Registry
  16. 【c++】2020大一下c++期中考前小练习1
  17. ubuntu 安装wifi驱动(Device-c822)
  18. 小米手环7模拟加密门禁卡
  19. **官网被黑、网站被黑后和网站被入侵更好的处理解决办法
  20. os.chdir()

热门文章

  1. PowerPoint也能做动画荡秋千(转)
  2. Matlab中cell2mat,num2cell函数
  3. 哨兵机器人钢力士_漫威里的“机器人”角色:哨兵钢力士上榜,图6终结者乱入了!...
  4. html之一行代码给table设置标题
  5. 获取linux内核基址,LInux内核如何获取段基址和段长度
  6. 安全不“放假”,VR安全教育等你沉浸式体验
  7. 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬件那些事(2.2)- 在串行NOR Flash XIP调试原理
  8. 致自己:HTML学习笔记二
  9. unity农场模拟经营游戏源码
  10. mysql创建库语句