数据结构之树各种类型介绍

树(英语:tree)是一种抽象数据类型或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>0)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:

① 每个节点有零个或多个子节点;
② 没有父节点的节点称为根节点;
③ 每一个非根节点有且只有一个父节点;
④ 除了根节点外,每个子节点可以分为多个不相交的子树;

树的术语:度,叶子节点,根节点,父节点,子节点,深度,高度。

节点深度:对任意节点x,x节点的深度表示为根节点到x节点的路径长度。所以根节点深度为0,第二层节点深度为1,以此类推

节点高度:对任意节点x,叶子节点到x节点的路径长度就是节点x的高度

树的深度:一棵树中节点的最大深度就是树的深度,也称为高度

父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点

子节点:一个节点含有的子树的根节点称为该节点的子节点

节点的层次:从根节点开始,根节点为第一层,根的子节点为第二层,以此类推

兄弟节点:拥有共同父节点的节点互称为兄弟节点

:节点的子树数目就是节点的度

叶子节点:度为零的节点就是叶子节点

祖先:对任意节点x,从根节点到节点x的所有节点都是x的祖先(节点x也是自己的祖先)

后代:对任意节点x,从节点x到叶子节点的所有节点都是x的后代(节点x也是自己的后代)

森林:m颗互不相交的树构成的集合就是森林

二叉树

二叉树:每个节点最多含有两个子树的树称为二叉树。(我们一般在书中试题中见到的树是二叉树,但并不意味着所有的树都是二叉树。)

在二叉树的概念下又衍生出满二叉树和完全二叉树的概念

1、满二叉树:除最后一层无任何子节点外,每一层上的所有结点都有两个子结点。也可以这样理解,除叶子结点外的所有结点均有两个子结点。节点数达到最大值,所有叶子结点必须在同一层上

2、完全二叉树:若设二叉树的深度为h,除第 h 层外,其它各层 (1~(h-1)层) 的结点数都达到最大个数,第h层所有的结点都连续集中在最左边,这就是完全二叉树。

二叉查找树

二叉查找树是二叉树的衍生概念:

二叉查找树(英语:Binary Search Tree),也称为二叉搜索树、有序二叉树(ordered binary tree)或排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉树:

1.若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;
2.若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值;
3.任意节点的左、右子树也分别为二叉查找树;
4.没有键值相等的节点。

二叉查找树相比于其他数据结构的优势在于查找、插入的时间复杂度较低为 O ( log ⁡ n ) 。二叉查找树是基础性数据结构,用于构建更为抽象的数据结构,如集合、多重集、关联数组等。

平衡二叉树(AVL树)

平衡二叉树:当且仅当任何节点的两棵子树的高度差不大于1的二叉树

其中AVL树是最先发明的自平衡二叉查找树,是最原始典型的平衡二叉树。

平衡二叉树是基于二叉查找树的改进。由于在某些极端的情况下(如在插入的序列是有序的时),二叉查找树将退化成近似链或链,此时,其操作的时间复杂度将退化成线性的,即O(n)。所以我们通过自平衡操作(即旋转)构建两个子树高度差不超过1的平衡二叉树。

红黑树

红黑树也是一种自平衡的二叉查找树

1.每个结点要么是红的要么是黑的。(红或黑)
2.根结点是黑的。  (根黑)
3.每个叶结点(叶结点即指树尾端NIL指针或NULL结点)都是黑的。  (叶黑)
4.如果一个结点是红的,那么它的两个儿子都是黑的。  (红子黑)
 5.对于任意结点而言,其到叶结点树尾端NIL指针的每条路径都包含相同数目的黑结点。(路径下黑相同)

在这里插入图片描述

B树

B 树和二叉查找树一样,都是树,B 树相当于是一棵多叉查找树,对于一棵 m 阶的 B 树具有如下特性:

1、根节点至少有两个孩子。
2、每个中间节点都包含 k - 1 个元素和 k 个孩子,其中 m/2 <= k <= m。
3、每一个叶子节点都包含 k - 1 个元素,其中 m/2 <= k <= m。
4、所有的叶子节点都位于同一侧。
5、每个节点中的元素从小到大排列,节点当中的 k - 1 个元素正好是 k 个孩子包含的元素的值域划分。	

在这里插入图片描述

B+树

m阶B+树是m阶B-tree的变体,它的定义大致跟B-tree一致,不过有以下几点不同

B+树与B树的区别

有n棵子树的结点中含有n个关键字,每个关键字不保存数据,只用来索引,所有数据都保存在叶子节点,其中⌈m/2⌉ <= n <= m

所有的叶子结点中包含了全部关键字的信息,及指向含这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。(有k个子结点的结点必然有k个关键码)(树的所有叶结点构成一个有序链表,可以按照关键码排序的次序遍历全部记录)

所有的非终端结点可以看成是索引部分,结点中仅含其子树(根结点)中的最大(或最小)关键字

通常在B+树上有两个头指针,一个指向根结点,一个指向关键字最小的叶子结点。(非叶结点仅具有索引作用,跟记录有关的信息均存放在叶结点中。)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42272869/article/details/112260923