树/二叉树/红黑树/堆/哈夫曼树/B 树
来源:互联网 发布:克里斯 洛克 知乎 编辑:程序博客网 时间:2024/05/16 14:02
定义:
树:n≥0个节点构成的有限集合。
当n=0,称为空树
当n>0,树中有一个称为“根”的特殊节点,其余节点可分为m个互不相交的有限集合,其中每个集合本身又是一颗树,称为原来树的子树。
大致了解的树:
二叉树:
二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树。
二叉查找树:
(1)若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
AVL树(平横查找树):每个节点的左子树和右子树的高度最多差1的二叉查找树(空树的高度定位-1)
红黑树和AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能
红黑树也是二叉查找树,它们当中每一个节点的比较值都必须大于或等于在它的左子树中的所有节点,并且小于或等于在它的右子树中的所有节点
一般的,红黑树,满足一下性质,即只有满足以下性质的树,我们才称之为红黑树:
1)每个结点要么是红的,要么是黑的。
2)根结点是黑的。
3)每个叶结点,即空结点(NIL)是黑的。
4)如果一个结点是红的,那么它的俩个儿子都是黑的。
5)对每个结点,从该结点到其子孙结点的所有路径上包含相同数目的黑结点。
算法第四版中给出红黑树
1) 红链接均为左链接
2) 没有任何一个节点同时和两条红链接相连
3) 该树是完美黑色平衡,任意空链接到根节点上的路径上的黑色链接数量相同
红黑树虽然本质上是一棵二叉查找树,但它在二叉查找树的基础上增加了存储为来表示节点的颜色。
哈夫曼树:给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。
如何构造哈夫曼数呢:
把权值最小的两棵二叉树数合并:
如权值分别为 1,2,3,4,5
第一次将1和2合并得(合并后的权值为1+2=3):
因为有第一部所以最小的两棵二叉树的权值为3,3得(权值为6的一棵二叉树)
现在权值最小的两棵二叉树是4和5故的
最后两个权值分别为9和6的二叉树合并
AVL树:
AVL树的插入策略:
从根节点开始插入,如果比节点大,插入右边子树,如果比节点小插入左边子树。依次遍历的比较,进行插入,如果树是空的,将其赋给树的根节点,如果在向左插入,或向右插入的时候,子树是空的,那么就直接挂在节点的左边或右边(看向那边插入)
插入的时候,如何旋转?
因为插入的时候是遍历版的比较,每一次比较都会有返回,进行查看比较的节点左边子树高度和右边子树高度之差。如果高度之差为2,那么改节点失衡。
如果插入的节点在失衡节点的左子树: 插入节点比失衡节点的左子节点小,那么进行LL单旋转 插入节点比失衡节点的左子节点大,那么进行LR双旋转如果插入的节点在失衡节点的右子树: 插入节点比失衡节点的右子节点大,那么进行RR单旋转 插入节点比失衡节点的右子节点小,那么进行RL双旋转
LL单旋转:
RR单旋转:
双旋转可以转换为两次单旋转:
LR旋转:失衡节点的左子节点先当作失衡节点进行一次RR旋转,在以失衡节点进行一次LL旋转
RL旋转:失衡节点的右子节点当作失衡节点进行一次LL旋转,在以失衡节点进行RR旋转。
红黑树:
参考:http://blog.csdn.net/v_JULY_v/article/details/6105630这里就不再多说
B+树:
根据《MySQL技术内幕++InnoDB存储引擎++第2版》
- 树/二叉树/红黑树/堆/哈夫曼树/B 树
- 数据结构-BST、AVL、二叉堆、B树、B+树、红黑树
- 二叉树、二叉堆
- java 关于二叉搜索树,平衡二叉树,b树,二叉堆的几段代码
- 二叉树 最小堆
- 二叉树堆排序
- 二叉树 - 最大堆
- 堆二叉树
- 二叉树--堆
- 二叉搜索树,堆
- 二叉树与堆
- 二叉树+二叉树搜索树+堆
- 树:二叉树和堆
- 二叉树及堆排序
- 二叉树存储 最小堆
- 二叉树之堆排序
- 二叉搜索树和堆
- 二叉树--堆的实现
- 【Java并发编程】之二:线程中断(含代码)
- (剑指offer)丑数,只包含因子2、3和5的数称作丑数
- 音视频封装格式、编码格式知识
- oracle查询重复数据方法
- 银联支付接口
- 树/二叉树/红黑树/堆/哈夫曼树/B 树
- The TensorFlow library wasn't compiled to use SSE4.1/SSE4.2/AVX/AVX2/FMA instructions, but these are
- php 面试题分析
- ps的cc版本安装包以及破解包
- SequoiaDB 受邀参加旧金山Spark 技术峰会,与Spark联手推动大数据企业级应用
- 第0次作业
- 自媒体时代如何营销?自媒体推广投放新趋势
- Leetcode OJ 69 Sqrt(x) [Easy]
- Using SecureString