您的位置:首页 > 理论基础 > 数据结构算法

数据结构 B树,B+树,红黑树

2020-01-15 08:07 337 查看

二叉树:满二叉树,完全二叉树;
定义:若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。此外,能够按照每层树来排序号(集中左边的目的)。
完全二叉树:用于堆内存,(堆排序),diskar,F算法都用完全二叉树进行优化;二叉排序树性能依赖于平衡性,平衡性依赖完全二叉树。

B树

百度定义:Balance tree of order,是一颗平衡的m路搜索树,查找次数和比较次数是log(N)级别,它或者是空树或者满足下列性质的树:
若m阶树
1,根节点至少有两个子节点,【2,m】
2,除根和叶子节点的节点的子节点个数【ceil(m/2),m】,
3,每个非根节点的节点包含的关键字个数为(取上)【ceil(m/2)-1,m-1】个,以升序排列
4,非叶子节点的关键字个数=子节点个数-1,k个关键字把节点分为k+1个儿子。
5,所有叶子节点都在同一行

考虑磁盘IO的影响,读取磁盘速度慢,故读取次数很大程度影响速率。数据索引是存在磁盘上,当数据库数据量大时,不能全加入内存。减少IO次,鉴于树的情况,树的高度决定IO次数。
B树,每个节点最多包含m个子节点,m称为B树阶,m的大小取决于磁盘页大小。

查询

B树查询相对于二叉树:
1,b树查询时比较次数并不比二叉树少,尤其是节点数非常多,内存的比较速度块,耗时可以忽略。
2,B树的高度是远低于二叉树,大大提高查询性能。(每次读取磁盘IO会读取几个数拿来和查询数进行比较,降低了高度)

插入

理论上:

1,定位:查找插入该关键字的位置,即最底层某个非叶子节点(规定一定是插入在最底层某个非叶子节点)
2,插入
如果插入后,并不影响M阶B树的定义,即插入后节点对应的关键字个数【m/2-1,m-1】,直接插入;
否则,插入后的中间位置的关键字并入父节点中,中间节点左侧节点保留在原节点,右侧放入新的节点中。如果父节点也超过,则继续分裂。

实例:

插入4值。
1,自定向下找到位置,确定如图3,5之间
2,3阶,关键字处于【1,2】,超过界限,将加入后的4并入父节点,
3,父节点也超过,继续将4向上并

删除

先查询到删除元素,然后针对于终端节点和非终端节点

终端节点

1,直接删除
若删除的关键字总数>ceil(m/2)-1,删除后依旧满足B树定义,直接删除
2,兄弟够借
若删除的关键字总数=ceil(m/2)-1,且此节点邻近兄弟节点关键字个数>ceil(m/2)则借一个。即左右旋转
3,兄弟不够借
pass

非终端节点

1,找到左驱节点,若左驱节点删除后可以满足B树定义,则将两者互换,删除左驱节点的值。

2,找到右驱节点,若右驱节点删除后可以满足B树定义,则将两者互换,删除右驱节点的值。
以上,两者都满足,则二选一。
3,左右都是为ceil(m/2)-1,第一步将左右合并,第二步将该点删除

B+树

定义:B+树是对B树的一种变形树,与B树差异在于:
1,非叶子节点,含有的关键字的个数==其子节点(子树)的个数即n个子节点中含有n个关键字(b树是n-1个关键字);
B+中这些关键字不保存数据,只用来索引,所有数据都保存在叶子节点(B树每个关键字都保存数据)
2,所有叶子节点中包含全部关键字信息以及指针,叶子节点本身依关键字的大小自小而大的顺序链接叶节点是一个链表
3,非叶子节点作为索引,节点中的关键字是对应子节点的最大(或最小)值。
4,B+树上有两个头指针,一个指向根节点,一个指向关键字最小的叶子节点。
5,同一个数字在不同数组中重复出现,根节点的最大元素就是B树最大元素

红黑树

百度定义:是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。
其性能好于平衡二叉树(AVL树,sbt等)
思路:提出规则,保证自平衡,操作过程中保持规则要求
意义:解决了一般二叉树如下图的问题,查找会很慢,类似于线性查找。

规则:
1,节点只用红和黑
2,红色节点的两个子节点必然是黑色(无连续两个红色)
3,根节点是黑色
4,任一节点到所有叶节子的所有路径包含的黑色节点数目相同
5,每个叶子节点都是黑色的空节点

在插入或者取出过程中,若是改变了规则,通过【1】变色,【2】左/右旋转
左旋转:逆时针旋转两个节点,让父节点被右子节点代替,自己变为左节点,(注意将下面进行移动),vice visa 右节点 反向

B树,B+树参考链接:https://www.geek-share.com/detail/2711296557.html
五分钟了解红黑树:http://www.360doc.com/content/18/0904/19/25944647_783893127.shtml

  • 点赞
  • 收藏
  • 分享
  • 文章举报
於川川呀 发布了13 篇原创文章 · 获赞 0 · 访问量 377 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: