二叉树、平衡二叉树、B树、B+数、红黑树(简述)

二叉查找树(BST)具备什么特性呢?
1.左子树上所有结点的值均小于或等于它的根结点的值。
2.右子树上所有结点的值均大于或等于它的根结点的值。
3.左、右子树也分别为二叉排序树。
查找结点里面的值 的方式就是二分查找的思想 查找次数就是树的高度

二叉查找树可以任意地构造 向一方倾斜的二叉树是不平衡的,查询效率就低了

平衡二叉树(AVL Tree):
插入或删除一个节点后,AVL树失去平衡,AVL树失去平衡之后,可以通过旋转使其恢复平衡
将根节点的左或右孩子作为新根节点(左旋 右旋 多次旋)

平衡多路查找树(B-Tree):
InnoDB存储引擎中有页(Page)的概念,页是其磁盘管理的最小单位。
B-Tree结构的数据可以让系统高效的找到数据所在的磁盘块,InnoDB存储引擎中默认每个页的大小为16KB

在把磁盘数据读入到磁盘时会以页为基本单位,在查询数据时如果一个页中的每条数据都能有助于定位数据记录的位置,
这将会减少磁盘I/O次数,提高查询效率。

B-Tree结构的数据可以让系统高效的找到数据所在的磁盘块
1.每个节点最多拥有m个子树(M阶B树的意思就是:一个根节点最多有M个子节点)
2.根节点至少有两个子树(M>=2(必须))
3.分支节点至少拥有m/2颗子树(除根节点和叶子节点外的都是分支节点)
4.所有叶子节点都在同一层,每个节点最多可以有m-1个key,并且以升序排列

根据根节点找到磁盘块 1 -》根据磁盘块 1 的指针 P2 =》P2 指针找到磁盘块 3 =》列表中找到关键字
P1磁盘块(键值、指针、data值) -》P2磁盘块(键值、指针、data值)
要3次磁盘I/O操作,和3次内存查找操作,按需读取磁盘快,不是全部加载
B-Tree相对于AVLTree缩减了节点个数

每个节点中有key,也有data,而每一个页的存储空间是有限的,如果data数据较大时就会导致每个节点(即一个页)
能存储的key的数量很小

B+Tree:
B+Tree是B-Tree的加强版
B+Tree相对于B-Tree有几点不同:
非叶子节点只存储键值信息。
所有叶子节点之间都有一个链指针。
数据记录都存放在叶子节点中。
B+Tree的高度一般都在2~4层
P1磁盘块(键值、指针)—》叶子结点磁盘块(键值、数据)

红黑树:
1.节点是红色或黑色。
2.根节点是黑色。
3.每个叶子节点都是黑色的空节点(NIL节点, 最底部)。
4 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
5.从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

什么情况下会破坏红黑树的规则,什么情况下不会破坏规则呢?
比如最底部叶子节点 上一层是红色 新添加的在红色下面 就不符合红黑色规则

从插入结点处开始,向上遍历树,并更新和修复在这个路径上的每个结点的平衡及其平衡信息(高度)即可

新符合红黑树的规则,尝试把红色节点变为黑色,或者把黑色节点变为红色。
左旋转:逆时针旋转红黑树的两个节点,使得父节点被自己的右孩子取代,,而自己成为自己的左孩子
右旋转:顺时针旋转红黑树的两个节点,使得父节点被自己的左孩子取代,而自己成为自己的右孩子

原文地址:https://www.cnblogs.com/webster1/p/12246156.html

时间: 2024-10-13 18:53:26

二叉树、平衡二叉树、B树、B+数、红黑树(简述)的相关文章

从二叉树到2-3-4树再到红黑树

直接进入正题: 一.如何从数组生成一个二叉树 假设数组为:{ 30, 13, 7, 43, 23, 12, 9, 33, 42, 21, 18, 6, 3, 50 },我们不对数组排序,直接生成二叉树. 创建流程: 1.将第一数作为根节点: 2.插入13,13小于30,放在30的左边子节点. 3.插入7,7小于30,7小于13,放在13的左边子节点. 4.插入43,43大于30,放在30的右边子节点. 5.放入23,23小于30,23大于13,放入13的右边子节点. 6.放入12,12小于30,

从2-3-4树模型到红黑树实现

目录 从2-3-4树模型到红黑树实现 前言 2-3-4树 查找 插入 树的生长 删除 左倾红黑树 查找 插入 删除 总结 参考文献 从2-3-4树模型到红黑树实现 前言 红黑树,是一个高效的二叉查找树.其定义特性保证了树的路径长度在黑色节点上完美平衡,使得其查找效率接近于完美平衡的二叉树. 但是红黑树的实现逻辑很复杂,各种旋转,颜色变化,直接针对其分析,大多数都是死记硬背各种例子,不太容易有个直观的理解.实际上,红黑树是实现手段,是其他概念模型为了方便在二叉树上实现进而定义的节点颜色这个信息.如

3、如何判断一棵树是否是红黑树?

一.红黑树的定义 红黑树是每个节点都带有颜色属性的二叉查找树,颜色或红色或黑色.除了二叉查找树强制的一般要求以外,对于任何有效的红黑树有如下的额外要求: 性质1. 节点是红色或黑色. 性质2. 根节点是黑色. 性质3 每个叶节点(NIL节点,空节点)是黑色的. 性质4 每个红色节点的两个子节点都是黑色.(从每个叶子到根的所有路径上不能有两个连续的红色节点) 性质5. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点. 二.如何判断是否是红黑树(假设正数代表黑色,负数代表红色) 1.中序遍

平衡二叉树(AVL)与红黑树

一.AVL树性质 1.本身首先是一棵二叉搜索树. 2.带有平衡条件:每个结点的左右子树的高度之差的绝对值(平衡因子)最多为1. 也就是说,AVL树,本质上是带了平衡功能的二叉查找树(二叉排序树,二叉搜索树). AVL树的查找.插入和删除在平均和最坏情况下都是O(logn).如果在AVL树中插入或删除节点后,使得高度之差大于1.此时,AVL树的平衡状态就被破坏,它就不再是一棵二叉树:为了让它重新维持在一个平衡状态,就需要对其进行旋转处理. 二.红黑树性质 红黑树是每个节点都带有颜色属性的二叉查找树

树-二叉查找树、红黑树

二叉查找树的性质: 如果节点的左子树不空,则左子树上所有结点的值均小于等于它的根结点的值: 如果节点的右子树不空,则右子树上所有结点的值均大于等于它的根结点的值: 任意节点的左.右子树也分别为二叉查找树: 二叉查找树查找某个结点时,是二分查找的思想,查找所需的最大次数等同于二叉树的高度. 缺陷:二叉查找树多次插入新节点时,有可能导致二叉查找树的不平衡,变成线性结构. 二叉查找树的优化=> 红黑树 1.节点是红色或黑色. 2.根节点是黑色. 3.所有叶子都是黑色(叶子是NIL节点). 4.每个红色

数据结构(三):非线性逻辑结构-特殊的二叉树结构:堆、哈夫曼树、二叉搜索树、平衡二叉搜索树、红黑树、线索二叉树

在上一篇数据结构的博文<数据结构(三):非线性逻辑结构-二叉树>中已经对二叉树的概念.遍历等基本的概念和操作进行了介绍.本篇博文主要介绍几个特殊的二叉树,堆.哈夫曼树.二叉搜索树.平衡二叉搜索树.红黑树.线索二叉树,它们在解决实际问题中有着非常重要的应用.本文主要从概念和一些基本操作上进行分类和总结. 一.概念总揽 (1) 堆 堆(heap order)是一种特殊的表,如果将它看做是一颗完全二叉树的层次序列,那么它具有如下的性质:每个节点的值都不大于其孩子的值,或每个节点的值都不小于其孩子的值

排序二叉树,平衡二叉树和红黑树的概念以及相关的操作讲解

1. 排序二叉树     排序二叉树是一种特殊结构的二叉树,可以非常方便地对树中所有节点进行排序和检索. 排序二叉树要么是一棵空二叉树,要么是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值: 若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值: 它的左.右子树也分别为排序二叉树. 图 1 显示了一棵排序二叉树: 图 1. 排序二叉树 对排序二叉树,若按中序遍历就可以得到由小到大的有序序列.如图 1 所示二叉树,中序遍历得: {2,3,4,8,9,9

红黑树一:从二叉树、2-3树到红黑树,一步步讲解红黑树的来源

目录 1 引言 2 从二叉查找树到红黑树的演变 2.1 二叉查找树 2.2 平衡二叉查找树 2.3 2-3树 2.4 红黑树 1 引言 RB-Tree,即红黑树,它的定义如下: 这是一颗二叉树,且每个节点要么是红色.要么是黑色 根节点是黑色 叶子节点也是黑色的,且叶子节点不存储数据,即叶子节点是nil空节点 不能出现连续的红色节点,即相邻的红色节点必须被黑色节点隔开 任何一个节点到达其任意一个叶子节点均包含相同数目的黑色节点 单看上面的定义,大家肯定跟我一样一头雾水,别急,下面我们从最简单的二叉

TreeMap源码分析之一 —— 排序二叉树、平衡二叉树、红黑树

一.排序二叉树(BST树) 1.排序二叉树的定义 排序二叉树,Binary Sort Tree 排序二叉树要么是一棵空二叉树,要么是具有下列性质的二叉树: (1)若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值: (2)若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值: (3)它的左.右子树也分别为排序二叉树. 按中序遍历排序二叉树可以得到由小到大的有序序列. 比如 2.排序二叉树的插入和删除 二.平衡二叉树(Balanced Binary Tree,AVL树) 三.红黑

查找二,二叉树查找与2-3树红黑树

BST: 每个节点的键,都大于其左自述中的任意节点的键,而小于有字数的任意结点的键. 部分实现 get(Node x , Key key){ if(x == null) return null; cmp = key.compareTo(x.key); if(cmp<0) retrun get(x.right,key); else if(cmp>0) retrun get(x.left,key); else return x.val; } 2-3树红黑树: 属于平衡查找树,为了希望保持二分查找树