树|归纳&总结


前言

这篇文章,并不会涉及代码层面的编写或者分析,只是针对各种花里胡哨的树做一个归纳,防止忘记。

普通树

普通树不像搜索树那样需要“硬性”规则,个人认为只要数据的组织形式呈现“一对一或者一对多”的树形特性,都可视为一颗普通树。最极端的树,如树1,呈现出链表的形式,此时可能表现出来的特点就是插入方便的特点。

再比如,unix的文件组织结构,也是以树形结构进行文件的组织,其中,带连接树形结构是指目录呈现树形,树的叶子节点则是指向文件的指针。
在这里插入图片描述

二叉搜索树

而二叉搜索树(好像有些地方又叫二叉查找数),在二叉树的范围之上,实现了较为方便的搜索。具体的搜索规则如下:

若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。

将上面规则全部反过来,又可以称作二叉镜像树。

在这里插入图片描述
二叉搜索树如果正常分布,最坏的时间复杂度为O(logN),,而极端条件下,树的结构是链表的形式,此时的树就不平衡了,搜索时间复杂度去到了O(n)。

完全二叉树

一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。这段话可以用如下图进行表示:
在这里插入图片描述
即树节点的编号(1)和层序遍历时节点对应的位置编号(第一个节点)一致。注意,层序遍历先序遍历要加以区分。

多叉搜索树

关于多叉搜索树,个人觉得可以简单理解为某个某个节点对应着两个或者两个以上的节点。在此条件之下,加上搜索的条件(可以类似二叉搜索树的搜索规则那样)

如图,我要查找20或者25,我在遍历15到56的过程中,就可以确定范围了,此时再往下走即可。

在这里插入图片描述
多叉搜索树常见于存储数据的数据库中(非关系和关系),如B+树、B树,它们为了减少IO次数,需要快速确定搜索的数据所在的磁盘块中,此时树的高度就非常重要了,而多叉树可以满足这种需求。

除此之外,还有前缀树,也是一种多叉树的体现吧(有些人把它们归类到图里边也没错吧,树本身就是一种特殊的图)。前缀树在数据查询方面也是据有优势的,例如elasticsearch中的搜索也有用到前缀树的思想。

说到前缀树就说说线段树吧,它是一种范围查询的树,咋一看会和B+树、B树有所类似,但线段树还是二叉的范围内,只不过每个节点都是一个待查询的集合。(当然了,可能有大佬将某个节点划分成三叉、四叉等等,那也行啦,毕竟规矩是死的

红黑树

红黑树的大名算是每个程序员熟悉而又陌生的名字了吧。首先红黑树也是一颗二叉搜索树,而二叉搜索树在极端的条件下,就成链表形式了,此时,树的状态处于不平衡的状态,即树两边的高低差太大,对高度较为高的子树进行搜索,复杂度可能来到O(n)。

而红黑树在二叉搜索的基础上加上了自平衡的特性(不是绝对平衡),使得左右子树高度差不会差太多。

在这里插入图片描述

结合上图进行理解,红黑树的性质如下(其实规矩死的,人是活的,不一定就得黑色、红色,随你喜欢都可以,甚至反过来也行):

  1. 每个节点非黑即红。
  2. 根节点是黑色。
  3. 每个叶子节点(null)是黑色。
  4. 每个红色结点的两个子结点(包含null节点)一定都是黑色。
  5. 任意一结点到每个叶子结点的路径都包含数量相同的黑结点。
  6. 如果一个结点存在黑子结点,那么该结点肯定有两个子结点。(因为任意一节点到每个叶子间的黑节点相同。那一个节点(假设为红色)如有黑色子节点,结合性质4,另一个子节也必须为黑色。假设为黑色,为了满足性质5,另一个节点也需要是null.)

红黑树在插入、删除时通过左旋和右旋、节点变色使得整棵树较为平衡(只能说大致平衡)。

自平衡二叉搜索树(AVL)

AVL有些地方好像也直接叫做平衡二叉树,它的本质也是一颗二叉搜索(查找)树。它比红黑树更加追求极致的平衡。

AVL也是通过左旋和右旋来维持树的平衡的,不过它没用像红黑树那样,引入红节点和黑节点的概念,而是采用平衡因子来维持树的平衡。
在这里插入图片描述
如图所示,平衡因子(BF,Balance Factor):结点的左子树的深度减去右子树的深度,那么显然-1<=bf<=1,负数的情况是左子树比右子树矮的的时候。

由于都是整数相减,所以bf的取值其实就是-1,0,1。虽然AVL比红黑树的平衡度高,但也需要付出代价,在增加或者删除节点的时候,根据不同情况,计算不同的平衡因子,导致旋转的次数比红黑树多一些,而红黑树只要任意一结点到每个叶子结点的路径都包含数量相同的黑结点即可。

猜你喜欢

转载自blog.csdn.net/legendaryhaha/article/details/106344850
今日推荐