算法8红黑树PPT资料.ppt
《算法8红黑树PPT资料.ppt》由会员分享,可在线阅读,更多相关《算法8红黑树PPT资料.ppt(17页珍藏版)》请在冰豆网上搜索。
性质性质2:
每个前端结点为黑色结点;
性质性质3:
红结点的儿子结点均为黑结点;
性质性质4:
在从任一结点到其子孙前端结点在从任一结点到其子孙前端结点的所有路径上应该有相同个数的所有路径上应该有相同个数的黑结点。
的黑结点。
2黑高度:
黑高度:
从红黑树中任一结点x出发,到达一个前端结点的任意一条路径上(不包括结点x)的黑结点个数称为结点x的黑高度,记作bh(x)。
红黑树的黑高度:
为其根结点的黑为其根结点的黑高度。
高度。
3用红黑树来存储有序集中的元素时,用红黑树来存储有序集中的元素时,其结点类型可说明为其结点类型可说明为:
typerbnodetype=recordelement:
elementtype;
leftchild,rightchild,parent:
rbnodetype;
color:
(red,black)end;
4红黑树表示的有序集的类型:
红黑树表示的有序集的类型:
ORDERED_SET=rbnodetype;
5根据红黑树的根据红黑树的“红黑性质红黑性质”,可推出,可推出红黑树具有以下的平衡树性质:
任意一棵红黑树具有以下的平衡树性质:
任意一棵有有n个结点个结点(不包括前端结点不包括前端结点)的红黑树的高的红黑树的高度至多为度至多为2log(n+1)。
讨论:
首先证明在以红黑树中任一结点首先证明在以红黑树中任一结点x为为根的子树中,至少包含根的子树中,至少包含2bh(x)-1个结点个结点,其其中中bh(x)为结点为结点x的黑高度。
对结点的黑高度。
对结点J的高度的高度用数学归纳法用数学归纳法:
6证明:
证明:
(1)对于前端结点对于前端结点x,其高度为,其高度为-1,其黑高,其黑高度度bh(x)=0,此时子树中结点个数为,此时子树中结点个数为20-1=0。
当。
当结点结点x的高度为的高度为0时,其两个儿子结点均为前端结时,其两个儿子结点均为前端结点,故其黑高度为点,故其黑高度为bh(x)=1。
此时,以。
此时,以x为根的子为根的子树中恰好含有树中恰好含有21-1=1个结点;
个结点;
(2)当结点当结点x的高度大于的高度大于0时,它有两个儿子结点。
时,它有两个儿子结点。
当其儿子结点当其儿子结点y为红结点时:
为红结点时:
bh(y)=bh(x)当其儿当其儿子结点子结点y为黑结点时:
为黑结点时:
bh(y)=bh(x)-1由于结点由于结点y的的高度小于结点高度小于结点x。
7由归纳假设知,以由归纳假设知,以y为根的子树中至少包含为根的子树中至少包含:
个结点。
以以x根的子树中至少包含根的子树中至少包含:
由数学归纳法即知上述结论成立。
(3)红黑树的高度为红黑树的高度为h,由红黑树的性质,由红黑树的性质(3)和和性质性质(4)可知,从根结点到任何一个前端结点的可知,从根结点到任何一个前端结点的路径上至少有一半的结点路径上至少有一半的结点(不包含根结点不包含根结点)是黑是黑结点。
因此,红黑树的黑高度至少为结点。
因此,红黑树的黑高度至少为h/2.可知可知82、旋转变换、旋转变换在红黑树中用二叉搜索树的插入或删在红黑树中用二叉搜索树的插入或删除运算插入或删除一个元素后,我们可以除运算插入或删除一个元素后,我们可以通过改变某些结点的颜色,或改变某些结通过改变某些结点的颜色,或改变某些结点的指针来维持红黑性质。
改变结点指针点的指针来维持红黑性质。
改变结点指针时要用到结点的旋转变换,其目的是调整时要用到结点的旋转变换,其目的是调整结点的子树高度,并维持二叉搜索树性质,结点的子树高度,并维持二叉搜索树性质,即结点中元素的中序性质。
即结点中元素的中序性质。
9旋转变换分为左旋转和右旋转两种类型,如图旋转变换分为左旋转和右旋转两种类型,如图512所示。
所示。
变换是通过修改结点变换是通过修改结点x和和y的有关指针来实现的。
的有关指针来实现的。
101133、插入运算、插入运算往红黑树表示的有序集插入一个元素的运往红黑树表示的有序集插入一个元素的运算,在最坏情况下用算,在最坏情况下用O(logn)时间就可完成。
首时间就可完成。
首先将元素先将元素x插入红黑树,并将存储元素插入红黑树,并将存储元素x的树结的树结点着成红色。
为了使插入一个元素后的红黑树点着成红色。
为了使插入一个元素后的红黑树仍满足红黑性质,必须对一些结点进行旋转变仍满足红黑性质,必须对一些结点进行旋转变换或重新着色。
在红黑树中进行元素插入的运换或重新着色。
在红黑树中进行元素插入的运算可实现如下:
算可实现如下:
12141516实验:
建立红黑树,完成插入和删除算法。
17