红黑树,B树,完全二叉树和AVL树

1.红黑树和B树

特点:
1.节点不是红色就是黑色;
2.根节点是黑色的;
3.红色节点的子节点是黑色的(不存在两个相邻的红色节点)
4.任意节点到叶子结点的路径都包含相同数目的黑色节点;
5.叶子结点是黑色的空节点;
6.红黑树从根路径到叶节点的最长路径不会超过最短路径的2倍;

1.1红黑树的结构变化调整

变色与旋转
变色;通过转换节点颜色来保证红黑树的结构;
旋转(左,右)
左旋转:逆时针旋转红黑树的两个节点,使得父节点被自己的有孩子取代,自己成为孩子的左节点;
右节点:顺时针旋转红黑树的两个节点,使得父节点被自己的左孩子取代,自己成为孩子的右节点;

1.2插入节点的五种情况

注意:插入的节点为红色节点,如果插入的是黑色节点,会凭空多出来一个黑色节点,破坏了红黑树的规则;
情况一: 插入节点为根节点 方法:直接改变节点颜色;
在这里插入图片描述

情况二:新节点的父节点是黑色的
方法:不做任何改变;

情况三:新节点的父节点和叔叔节点都是红色

方法:分别改变父节点,叔叔节点以及祖父节点的颜色;


情况四:新节点的父节点是红色的,没有叔叔节点或者叔叔节点为黑色,并且新节点是父节点的右孩子,父节点是祖父节点的左孩子

方法:以父节点为轴进行左旋转;(转换至情况五)


情况五:新节点的父节点是红色,没有叔叔节点或者叔叔节点为黑色,并且新节点是父节点的左节点,父节点是祖父节点的左孩子

方法:以祖父节点为轴右旋转,再改变父节点和祖父节的颜色;



实例演变


根据情况三:叔叔节点和父节点都是红色节点,分别改变祖父节点,叔叔节点以及父节点的颜色


可看做情况五的镜像:以祖父节点为轴进行左旋转;

再在改变父节点和祖父节点颜色,红黑树节点插入完成;

B树(多路平衡树)

一棵m阶的B 树 (m叉树),要么为空树,要么有一下的特性如下:
1.根节点至少有两个孩子 ,根节点的子树范围为【2~M】,根节点至少包含一个关键字。
2.非叶子节点(除根结点和叶子结点外)至少有M/2(上取整)个孩子,至多有M个孩子,关键字个数为【子树个数-1】。
3.所有的叶子节点都在同一层。
4.关键字分布在整个树中;
5.任何关键字只会出现在一个节点中;
6.检索的结果不一定要查询到叶子节点;
7.B树的 阶数 是指 树中 的 最多子节点个数

在这里插入图片描述

B+树(B树的变体)

M阶B+树特点:
1.有n颗子树的非叶子节点中含有n个关键字,关键字不保存数据,只当做索引来使用,所有的数据都存放在叶子节点中;
2.所有的叶子节点中包含全部关键字的信息,及指向这些关键字记录的指针,并且叶子节点本身依关键字的大小自小而大顺序排列;
3.所有的非叶子节点可以看成是索引部分,节点中仅含子树中最大或最小的关键字;
4.B+树通常有两个头指针,一个指向根节点,一个指向关键字最小的叶子节点;
5.用一个数字会在不同节点中重复出现,根节点中的最大元素就是B+树中的最大元素;
在这里插入图片描述

B+树比B树的查询优势

1.B树的中间节点不保存数据,因此磁盘页能够容纳更多的元素,相比B树更矮更胖;
2.B+树查询需要查询到叶子节点,B树只需匹配到即可不用管元素位置,B+树查找更稳定;
3.对于范围查找,B+只需遍历叶子节点链表即可,B树需要重复的中序遍历;

2.完全二叉树

完全二叉树(Complete Binary Tree)
1.若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。
2.完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。
3.一棵二叉树至多只有最下面的一层上的结点的度数可以小于2,并且最下层上的结点都集中在该层最左边的若干位置上,而在最后一层上,右边的若干结点缺失的二叉树,则此二叉树成为完全二叉树。
在这里插入图片描述

二、完全二叉树特点
1、叶子结点只可能在最大的两层上出现,对任意结点,若其右分支下的子孙最大层次为L,则其左分支下的子孙的最大层次必为L 或L+1;
2、出于简便起见,完全二叉树通常采用数组而不是链表存储。 3、满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树。
4、完全二叉树第i层至多有2(i-1)个节点,共i层的完全二叉树最多有2i-1个节点。
5、只允许最后一层有空缺结点且空缺在右边,即叶子结点只能在层次最大的两层上出现;
6、对任一结点,如果其右子树的深度为j,则其左子树的深度必为j或j+1。 即度为1的点只有1个或0个。

3.AVL树

平衡二叉树 全称叫做 平衡二叉搜索(排序)树,简称 AVL树。英文:Balanced Binary Tree (BBT),注:二叉查找树(BST)
AVL 什么意思 ?
AVL 是大学教授 G.M. Adelson-Velsky 和 E.M. Landis 名称的缩写,他们提出的平衡二叉树的概念,为了纪念他们,将 平衡二叉树 称为 AVL树。
AVL树本质上是一颗二叉查找树,但是它又具有以下特点:
1.它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,
2.左右两个子树 也都是一棵平衡二叉树。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值