赞
踩
1.二叉树
定义:二叉树(binary tree)是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树。二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树。
2.二叉查找树
定义:二叉查找树(BST,binary search tree),就是在二叉树的基础上增加有序性,这个有序性一般是指自然顺序,有了有序性,我们就可以使用二叉树来快速的查找、删除、插入元素了。
比如,上面这颗二叉查找树,查找元素的平均时间复杂度为O(log n)。
但是,如果插入的数据的顺序较为特殊时,二叉查找树有可能会变成类似链表的结构:
所以,在极限情况下,二叉查找树的时间复杂度是非常差的。
既然,插入元素后有可能导致二叉查找树的性能变差,那么,我们是否可以增加一些手段,让插入元素后的二叉查找树依然性能良好呢?
为了解决浪费计算机性能以及浪费时间复杂度等问题,从而诞生了红黑树。
2-3-4树先被提出来,后来红黑树由它发展而来。所以我们先来了解一下2-3-4树。
1.2-3-4树
定义:2-3-4树是平衡树,但不是二叉树,因为它可以有多个节点值,也可以有多个节点。它可以实现完美平衡。
2-3-4树所有叶子节点都包含相同深度。
2.名字的含义
2-3-4树中的2、3、4的含义指的是一个节点可能含有的子节点数。对非子叶节点有三种可能的情况:
3.构建2-3-4树(2-3-4树(b树)都是自下向上生长的)
插入操作--我们把1-10的数字拆入到一棵234树中
依次插入1、2、3节点
插入4节点,需要将4节点分裂成3个2节点的操作
插入5,形成一个新的4节点
插入6,形成一个新的5节点,分裂3、4、5,合并2、4
插入7,形成新的4节点
插入9,形成7、8、9的4节点
插入10,形成7、8、9、10的5节点。合并8后,形成2、4、6、8的5节点。继续分裂2、4、6、8节点
到此,2-3-4树构建完毕
红黑树(Red Black Tree)是一种自平衡的二叉查找树。除了符合二叉查找树的基本特性外,它还具有下列附加特性:
1.每个节点是红色或黑色。
2.根节点永远是黑色。
3.每个叶子节点都是黑色的空节点(Null节点)。
4.若一个节点是红色的,那么他的子节点必须是黑色的。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
5.从任一节点到该节点的所有路径都包含相同数目的黑色节点。
这些约束强制了红黑树的关键性质: 从根节点到叶子节点的最长的可能路径不多于最短的可能路径的两倍长。
下图中这棵树,就是一颗典型的红黑树:
将2-3-4树按照上述性质转换为红黑树
欢迎探讨,如有错误敬请指正。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。