算法(二):树,以及变形

本文详细介绍了树的相关概念,包括二叉树的遍历方式、线索二叉树的定义及其作用、二叉排序树的构造和删除规则,还探讨了平衡二叉树(AVL树)的重要性。此外,讲解了哈夫曼编码的构造过程以及红黑树的特性,最后提到了适用于数据库的B树和B+树。
摘要由CSDN通过智能技术生成

二叉树

从二叉树说起,
先序遍历:先访问根,先序遍历左子树,先序遍历右子树
中序遍历:中序遍历左子树,访问根,中序遍历右子树
后序遍历:后序遍历左子树,后序遍历右子树,访问根
即,X序遍历,指的是相对根而言。
由遍历构造二叉树:
选择两个遍历方法,其中一个为中序遍历,另一个为其他遍历(先序或者后续或者层次),均可以复现原二叉树。

线索二叉树

二叉树线索化规定:

若无左子树,令节点的左指针指向其前驱,否则指向左子树;若无右子树,令该节点指向其后继节点,否则指向由子树。

这里所指的前驱和后继根据先序中序后序的不同所指向的节点不同。
但一般来说:中序线索化二叉树可以很好的服务运算

二叉排序树

其定义如下:
1.任何一个节点的左子树上的关键字均小于根节点的关键字
2.任何一个节点的右子树上的关键字均大于根节点的关键字
二叉排序树的构造,插入方法都异常简单,稍微复杂一点的是删除方法。
删除节点的规则如下:
若待删除节点:
①右子树空,用左子女填补
②左子树空,用右子女填补
③左右子树均不为空,在右子树上找中序第一个子女填补;或者在左子树找到中序遍历的最后一个子女。

平衡二叉树

任意节点的左右子树高度差的绝对值不超过1,这样的二叉树为平衡二叉树(AVL数)

左右子树的高度差为该节点的平衡因子,平衡二叉树的平衡因子只可能是-1,0,1.
平衡二叉树是为了避免数的高度增长过快,而降低二叉排序树的性能。
具体的删除和插入方法导致的不平衡后如何恢复平衡,方法参照平衡二叉树的插入删除操作

哈夫曼编码

哈夫曼数的构造:
从一堆节点中选择两个权值最小的节点作为数的两个左右子树,其根是该两个节点之和。
从原先的节点中删除这两个节点,并添加两个节点的和作为新节点。
一直重复上述过程,知道节点堆为空。
具体如下图:
哈夫曼编码构造图

红黑树

红黑树虽然不能像平衡二叉树那么做到左右子树的完全平衡,但大体上也还是高度平衡的树。
其好处是不用像二叉平衡树那样的多震荡——插入节点或者删除容易引起对树的修改。
红黑树在需要大量插入和删除时,效率更高。

红黑树的特性:
(1)每个节点或者是黑色,或者是红色。
(2)根节点是黑色。
(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!]
(4)如果一个节点是红色的,则它的子节点必须是黑色的。
(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。

注意:
(01) 特性(3)中的叶子节点,是只为空(NIL或null)的节点。
(02) 特性(5),确保没有一条路径会比其他路径长出俩倍。因而,红黑树是相对是接近平衡的二叉树。

B树

又称为多路平衡查找树。
其实可以理解为类似于索引查找的那种结构。
B数有一个阶,为m。
表示每个节点最多的子树个数。
b数
如上图。
每个关键字在树中只出现一次。

B+树

是B数的变形,主要是为了数据库应用而来。主要的改造在于,子节点会包含父节点的信息。
所有的查找都会到子节点结束。
并且子节点有指向具体记录的指针。
B+树
还是贴一下参考文献:
B树、B-树、B+树与红黑树

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值