一篇文章看懂各种树的特点、概念、应用(二叉树、搜索树、B树、B+树)

 

一、树的基本术语

     树状图是一种数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:

      若一个结点有子树,那么该结点称为子树根的"双亲",子树的根是该结点的"孩子"。有相同双亲的结点互为"兄弟"。一个结点的所有子树上的任何结点都是该结点的后裔。从根结点到某个结点的路径上的所有结点都是该结点的祖先。

 

各种概念:

叶子:度为零的结点
分支结点:度不为零的结点
树的度:树中结点的最大的度
结点的度:结点拥有的子树的数目
树的度:Max{各结点的度})
层次:根结点的层次为1,其余结点的层次等于该结点的双亲结点的层次加1
树的高度:树中结点的最大层次


无序树:如果树中结点的各子树之间的次序是不重要的,可以交换位置
有序树:如果树中结点的各子树之间的次序是重要的, 不可以交换位置
森林:0个或多个不相交的树组成。对森林加上一个根,森林即成为树;删去根,树即成为森林

 

 

 

二、二叉树

     即每个结点最多有两个子树的树结构

 

三、满二叉树

     除最后一层无任何子节点外,每一层上的所有结点都有两个子结点二叉树。从图形形态上看,满二叉树外观上是一个三角形。

也就是说,满足条件:如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树。

 

四、完全二叉树

满足条件:

 1、所有的叶结点都出现在第k层或k-l层(层次最大的两层)

2、对任一结点,如果其右子树的最大层次为L,则其左子树的最大层次为L或L+l 

 

 

五、二叉搜索树Binary Search Tree

    根据二叉搜索树定义,有左子树节点值<根节点值<右子节点值,所以搜索树节点值,所以,对二叉搜索树进行中序遍历,可以得到一个递增的有序序列。

满足条件:

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

 

 

六、平衡二叉树(Balanced Binary Tree)

满足条件:

1、它是一棵空树,或它的左右两个子树的高度差的绝对值不超过1

2、左右两个子树都是一棵平衡二叉树

设计目的:这个方案很好的解决了二叉查找树退化成链表的问题,就是AVL树就是由平衡二叉树组成

 

七、平衡二叉搜索树(AVL Tree)

AVL树是最先发明的自平衡二叉查找树

满足条件:

1、满足二叉搜索树所有特征

2、满足平衡二叉树所有特征

设计目的:这个方案很好的解决二叉查找树退化成链表的问题,把插入,查找,删除的时间复杂度最好情况和最坏情况都维持在O(logN)

缺点:由于维护平衡代价较大,一般应用于插入删除不频繁,只是对查找要求较高的地方

应用场所:由于是最早的平衡二叉树之一。应用相对其他数据结构比较少。windows对进程地址空间的管理用到了AVL树。

对树增加删除时,不符合平衡条件要进行自旋操作。

 

 

 

八、红黑树(Red Black Tree

    是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。它是一颗自平衡的二叉搜索树,具有平衡二叉搜索树的全部特性,

并满足下面特点:

1、节点是红色或黑色。

2、根节点是黑色。

3、每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)

4、从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

设计目的:解决AVL树删除和插入效率低问题,它可以在O(log n)时间内做查找,插入和删除。

应用场景:范围较广
1、在Linux非实时任务调度中的应用
2、在Linux虚拟内存中的应用
3、在检测树的平衡性上的应用
4、epoll在内核中的实现,用红黑树管理事件块
5、nginx中,用红黑树管理timer等
6、Java的TreeMap实现
7、广泛用在C++的STL中。map和set都是用红黑树实现的。

 

对红黑树增加删除节点时,不符合自平衡条件要进行自旋操作。

 

九、B(B-tree)

一棵mB(balanced tree of order m)是一棵平衡的m路搜索树,但是会比普通的AVL树矮一些。

满足下列性质:

1、根结点至少有两个子女;

2、每个非根节点所包含的关键字个数 j 满足:m/2 - 1 <= j <= m - 1

3、除根结点以外的所有结点(不包括叶子结点)的度数正好是关键字总数加1,故内部子树个数 k 满足:m/2 <= k <= m

4、所有的叶子结点都位于同一层。

 

设计目的:一颗B树的高度远远小于红黑树的高度,而数据库效率一般由磁盘IO决定,同关键字总数相同的情况下B树高度越小,磁盘I/O所花的时间越少,效率就越高了。

应用范围:用在磁盘文件组织,数据索引和数据库索。

 

 

十、B+树(B+Tree)

    B+树是B树的一个升级版,相对于B树来说B+树更充分的利用了节点的空间,让查询速度更加稳定,其速度完全接近于二分法查找。

满足以下条件:

1、根结点至少有两个子女。

2、每个中间节点都至少包含ceil(m / 2)个孩子,最多有m个孩子。

3、每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m。

4、所有的叶子结点都位于同一层。

5、每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划。

6、每个叶子节点都有一个指针,指向下一个数据,形成一个有序链表。

 

应用:

    索引在数据库中的作用 ,现在MySQl的InnoDB引擎的索引大部分是B+树

B+树与B树的区别

1、B+树查找更加稳定、树相对更矮

2、B+树非叶结点仅具有索引作用,跟记录有关的信息均存放在叶结点中

3、B+树的所有叶结点构成一个有序链表,可以按照关键码排序的次序遍历全部记录

 

 

 

十一、哈夫曼树(Huffman Tree)

    给定n个权值作为n叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。这便使编码之后的字符串的平均长度、期望值降低,从而达到无损压缩数据的目的。

应用:

哈夫曼编码、哈夫曼译码、数据压缩

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值