算法导论习题—二叉搜索树红黑树区间树

Posted 之墨_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法导论习题—二叉搜索树红黑树区间树相关的知识,希望对你有一定的参考价值。

算法基础习题—二叉搜索树、红黑树、区间树

1.二叉搜索树:

T T T是一棵二叉搜索树,其关键字互不相同;设 x x x是一个叶结点, y y y为其父结点。证明: y . k e y y.key y.key或者是 T T T树中大于 x . k e y x.key x.key的最小关键字,或者是 T T T树中小于 x . k e y x.key x.key的最大关键字。

1. 1. 1. x x x y y y的左孩子结点时:
假设在树 T T T中存在一个结点 z z z满足 z . k e y > x . k e y   & &   z . k e y < y . k e y z.key>x.key\\ \\&\\&\\ z.key<y.key z.key>x.key && z.key<y.key,由于 T T T是一棵关键字互不相同的二叉搜索树,所以结点 z z z只能是结点 y y y的左孩子结点,或者是 y y y的父亲结点且结点 y y y是结点 z z z的右孩子结点。
对上述两种情况,若结点 z z z是结点 y y y的左孩子结点,由于 x x x y y y的左孩子结点且 x x x是一个叶结点,所以此时结点 z z z就是结点 x x x,与假设 z . k e y > x . k e y z.key>x.key z.key>x.key相矛盾,所以不成立;若 z z z y y y的父亲结点且结点 y y y z z z的右孩子结点,此时 x x x y y y都在结点 z z z的右子树中,所以此时虽然 z . k e y < y . k e y z.key<y.key z.key<y.key x . k e y > z . k e y x.key>z.key x.key>z.key,与假设 z . k e y > x . k e y z.key>x.key z.key>x.key相矛盾,所以当 x x x y y y的左孩子结点时: y . k e y y.key y.key T T T树中大于 x . k e y x.key x.key的最小关键字。
2. 2. 2. x x x y y y的右孩子结点时:
同理,结点 z z z只能是结点 y y y的右孩子结点,或者是 y y y的父亲结点且结点 y y y是结点 z z z的左孩子结点。若结点 z z z是结点 y y y的右孩子结点,则此时结点 z z z就是结点 x x x,与假设 z . k e y < x . k e y z.key<x.key z.key<x.key相矛盾,所以不成立;若 z z z y y y的父亲结点且结点 y y y z z z的左孩子结点,此时 x . k e y < z . k e y x.key<z.key x.key<z.key,与假设 z . k e y < x . k e y z.key<x.key z.key<x.key相矛盾,所以当 x x x y y y的右孩子结点时: y . k e y y.key y.key T T T树中小于 x . k e y x.key x.key的最大关键字。
综上, y . k e y y.key y.key或者是 T T T树中大于 x . k e y x.key x.key的最小关键字,或者是 T T T树中小于 x . k e y x.key x.key的最大关键字。

2.红黑树:

( a ) (a) (a)将关键字 41 , 38 , 31 , 12 , 19 , 8 41,38,31,12, 19,8 41,38,31,12,19,8连续地插入一棵初始为空的红黑树之后,试画出该结果树。
( b ) (b) (b)对于 ( a ) (a) (a)中得到的红黑树,依次删除 8 , 12 , 19 8, 12, 19 8,12,19试画出每次删除操作后的红黑树。

( a ) (a) (a)






( b ) (b) (b)



3.区间树:

假设我们希望记录一个区间集合的最大重叠点,即被最多数目区间所覆盖的那个点。
( a ) (a) (a)证明:在最大重叠点中,一定存在一个点是其中一个区间的端点。
( b ) (b) (b)设计一个数据结构,使得它能够有效地支持 I N T E R V A L − I N S E R T 、 I N T E R V A L − D E L E T E INTERVAL-INSERT、INTERVAL-DELETE INTERVALINSERTINTERVALDELETE以及返回最大重叠点的 F I N D − P O M FIND-POM FINDPOM操作。

( a ) (a) (a)
假设取得一个不在区间端点上的最大重叠点,对于这个点,其所在的区间的左端点或右端点中,必定存在一个端点与这个最大重叠点有着相同的区间数,所以,在最大重叠点中,一定存在一个点是其中一个区间的端点。
( b ) (b) (b)
使用红黑树存储各个区间的端点值,对于每个结点 x x x有附加信息 p ( x ) 、 v ( x ) p(x)、v(x) p(x)v(x),若结点为一个左端点,则 p ( x ) = 1 p(x)=1 p(x)=1,否则 p ( x ) = − 1 p(x)=-1 p(x)=1 v ( x ) v(x) v(x)存储以 x x x为根结点的所有子结点 p p p值与 x . p x.p x.p与的和。
v [ x ] = v [ l e f t [ x ] ] + p [ x ] + v [ r i g h t [ x ] ] v[x]=v[left[x]]+p[x]+v[right[x]] v[x]=v[left[x]]+p[x]+v[right[x]]

I N T E R V A L − I N S E R T INTERVAL-INSERT INTERVALINSERT
只需将执行插入操作时经过的所有结点 v v v值加上所插入结点的 p p p值,其余操作与红黑树的插入操作相同。
I N T E R V A L − D E L E T E INTERVAL-DELETE INTERVALDELETE
只需将执行删除操作时经过的所有结点 v v v值减去被删除结点的 p p p值,其余操作与红黑树的删除操作相同。
F I N D − P O M FIND-POM FIN算法导论读书笔记-第十三章-红黑树

树-二叉查找树红黑树

二叉树平衡二叉树红黑树B-树B+树日等之间的详解和比较

JavaSE——数据结构二叉树红黑树

排序二叉树平衡二叉树红黑树

树结构系列:平衡二叉树AVL树红黑树