数据结构——树/二叉树/平衡二叉树/遍历二叉树/红黑树/B树

一、树的基本概念

树是由结点和边组成的且不存在任何环的数据结构,没有结点的数称为空树,一个树仅有一个根节点。

二、二叉树

1.定义
二叉树是另一种树型结构,它的特点是每个结点至多有两棵子树,并且二叉树的子树有左右之分,其次序不能任意颠倒。

2.二叉树的性质
二叉树的第I层上至多有2^(i-1)个节点

深度为k的二叉树至多有2^k-1个节点

对任何一棵二叉树,如果其叶子结点(度为0)数为m, 度为2的结点数为n, 则m = n + 1

二叉树又分为:满二叉树、完全二叉树、完满二叉树

3.满二叉树
在这里插入图片描述
一个深度为k且有2^k-1个节点的二叉树称为满二叉树(通俗来讲就是每个结点都有左右子树)

4.完全二叉树
在这里插入图片描述
深度为k的,有n个节点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1至n的节点一一对应时,称为完全二叉树(缺了节点的满二叉树)

5.完满二叉树
在这里插入图片描述
区别
在这里插入图片描述

三、二叉树的存储结构

二叉链表

lchild  data  rchild

         data

       ↙               ↘

lchild             rchild

三叉链表
在这里插入图片描述

四、二叉树的遍历方法

1.先序遍历
在这里插入图片描述
先根节点,在左节点,在右节点

2.中序遍历
在这里插入图片描述
先左节点,在根节点,最后右节点

3.后序遍历
在这里插入图片描述
先遍历左右子树,最后遍历根节点

五、二叉查找树

任意节点左子树不为空,则左子树的值均小于根节点的值
任意节点右子树不为空,则右子树的值均大于于根节点的值
任意节点的左右子树也分别是二叉查找树
没有键值相等的节点
在这里插入图片描述
二叉查找树也称二叉排序树

六、AVL树(平衡二叉树)

AVL树是带有平衡条件的二叉查找树,和红黑树相比,它是严格的平衡二叉树,平衡条件必须满足(所有节点的左右子树高度差不超过1).

特点:
AVL树是一棵二叉搜索树
AVL树的左右子节点也是AVL树
AVL树拥有二叉搜索树的所有基本特点
每个节点的左右子节点的高度之差的绝对值最多为1,即平衡因子为范围为[-1,1]

七、红黑树

一种自平衡二叉查找树, 通过对任何一条从根到叶子的路径上各个节点着色的方式的限制,红黑树确保从根到叶子节点的最长路径不会是最短路径的两倍,用非严格的平衡来换取增删节点时候旋转次数的降低,任何不平衡都会在三次旋转之内解决

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

在这里插入图片描述

八、B树

B树即为二叉搜索树
在这里插入图片描述
B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;

否则,如果查询关键字比结点关键字小,就进入左儿子;如果比结点关键字大,就进入

右儿子;如果左儿子或右儿子的指针为空,则报告找不到相应的关键字;

B-树
是一种多路搜索树(并不是二叉的):

   1.定义任意非叶子结点最多只有M个儿子;且M>2;

   2.根结点的儿子数为[2, M];

   3.除根结点以外的非叶子结点的儿子数为[M/2, M];

   4.每个结点存放至少M/2-1(取上整)和至多M-1个关键字;(至少2个关键字)

   5.非叶子结点的关键字个数=指向儿子的指针个数-1;

   6.非叶子结点的关键字:K[1], K[2], …, K[M-1];且K[i] < K[i+1]

   7.非叶子结点的指针:P[1], P[2], …, P[M];其中P[1]指向关键字小于K[1]的子树,P[M]指向关键字大于K[M-1]的子树,其它P[i]指向关键字属于(K[i-1], K[i])的子树;

   8.所有叶子结点位于同一层;

在这里插入图片描述
B-树的搜索,从根结点开始,对结点内的关键字(有序)序列进行二分查找,如果命中则结束,否则进入查询关键字所属范围的儿子结点;重复,直到所对应的儿子指针为空,或已经是叶子结点;

B+树

B+树是B-树的变体,也是一种多路搜索树:

   1.其定义基本与B-树同,除了:

   2.非叶子结点的子树指针与关键字个数相同;

   3.非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树(B-树是开区间);

   5.为所有叶子结点增加一个链指针;

   6.所有关键字都在叶子结点出现;

在这里插入图片描述
B+的搜索与B-树也基本相同,区别是B+树只有达到叶子结点才命中(B-树可以在非叶子结点命中),其性能也等价于在关键字全集做一次二分查找;

发布了29 篇原创文章 · 获赞 10 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_36834959/article/details/104382176