二叉树(包含红黑树)简单概念

参考博客:传送门

目录

二叉树

满二叉树

完全二叉树

平衡二叉树(ALV树)

B树

B+树

红黑树(自平衡二叉树)

1. 左旋

2. 右旋 

添加

删除

二叉树性质

一般二叉树性质

完全二叉树性质


二叉树

是树的特殊一种,具有如下特点:

1、每个结点最多有两颗子树,结点的度最大为2

2、左子树和右子树是有顺序的,次序不能颠倒。

3、即使某结点只有一个子树,也要区分左右子树

满二叉树

所有的分支结点都存在左子树和右子树,并且所有的叶子结点都在同一层上,这样就是满二叉树。就是完美圆满的意思,关键在于树的平衡。

根据满二叉树的定义,得到其特点为:

  1. 叶子只能出现在最下一层。
  2. 非叶子结点度一定是2.
  3. 在同样深度的二叉树中,满二叉树的结点个数最多,叶子树最多。

二叉树(包含红黑树)简单概念_第1张图片

完全二叉树

对一棵具有n个结点的二叉树按层序排号,如果编号为i的结点与同样深度的满二叉树编号为i结点在二叉树中位置完全相同,就是完全二叉树。满二叉树必须是完全二叉树,反过来不一定成立。

二叉树(包含红黑树)简单概念_第2张图片

结合完全二叉树定义得到其特点:

  1. 叶子结点只能出现在最下一层(满二叉树继承而来)
  2. 最下层叶子结点一定集中在左 部连续位置。
  3. 倒数第二层,如有叶子节点,一定出现在右部连续位置。
  4. 同样结点树的二叉树,完全二叉树的深度最小(满二叉树也是对的)。

平衡二叉树(ALV树)

其左右子树的高度只差的绝对值不超过1,且其子树也都是平衡二叉树

B树

二叉树(包含红黑树)简单概念_第3张图片

B树中所有结点的孩子结点最大值称为B树的阶,通常用m表示。

 特征

根节点至少有两个孩子
每个中间节点都包含k-1个元素和k个孩子,其中ceil(m/2) <= k <= m
所有叶子节点位于同一层
每个节点的元素升序排列

B树主要用于文件系统以及部分数据库索引,例如: MongoDB

而大部分关系数据库则使用B+树做索引,例如:mysql数据库

B+树

二叉树(包含红黑树)简单概念_第4张图片

一个m阶的B+树具有如下几个特征:

节点的子树个数和元素数相等,且每个元素只用来索引,所有的数据都保存在叶子节点
叶子节点的数据顺序排列
所有中间节点元素都存在于子节点中,在其元素是最大或最小

B+树通常有两个指针,一个指向根结点,另一个指向关键字最小的叶子结点。

因此,对于B+树进行查找两种运算:
一种是从最小关键字起顺序查找
另一种是从根结点开始,进行随机查找。
 

B+树相比B树的优势:

1. 单一节点存储更多的元素,使得查询的IO次数更少;
2. 所有查询都要查找到叶子节点,查询性能稳定;
3. 所有叶子节点形成有序链表,便于范围查询。

红黑树(自平衡二叉树)

特点:
中序遍历单调不减
根节点是黑色
每个叶子节点(即不存在的空节点)为黑色
每个红色节点的子节点都是黑色,也就是说叶子节点到根节点不能有两个连续的红色节点
每个叶子节点到根节点的黑色节点个数一样

红黑树的时间复杂度为: O(lgn)

1. 左旋

二叉树(包含红黑树)简单概念_第5张图片

2. 右旋 

二叉树(包含红黑树)简单概念_第6张图片

添加

首先,将红黑树当作一颗二叉查找树,将节点插入;

然后,将节点着色为红色;

最后,通过旋转和重新着色等方法来修正该树,使之重新成为一颗红黑树。 

删除

首先,将红黑树当作一颗二叉查找树,将该节点从二叉查找树中删除;

然后,通过"旋转和重新着色"等一系列来修正该树,使之重新成为一棵红黑树。

二叉树性质

一般二叉树性质

1、在非空二叉树的i层上,至多有2^(i-1)个节点(i>=1)。

2、在深度为K的二叉树上最多有2^(k-1)个结点(k>=1)。

3、对于任何一棵非空的二叉树,如果叶节点个数为n0,度数为2的节点个数为n2,则有: n0 = n2 + 1

在一棵二叉树中,除了叶子结点(度为0)之外,就剩下度为 2(n2) 和 1(n1) 的结点了。则树的结点总数为T = n0 + n1 + n2;在二叉树中结点总数为T,而连线数为T-1。所以有:n0 + n1 + n2 - 1 = 2 * n2 + n1;最后得到 n0 = n2 + 1。

完全二叉树性质

具有n个结点的完全二叉树的深度为log2(n) + 1.


如有错误或不合理的地方,敬请指正~

加油!!

你可能感兴趣的:(计算机理论与心得,二叉树,红黑树简介,B树,B+树)