算法导论习题—二叉搜索树红黑树区间树
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
INTERVAL−INSERT、INTERVAL−DELETE以及返回最大重叠点的
F
I
N
D
−
P
O
M
FIND-POM
FIND−POM操作。
(
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
INTERVAL−INSERT:
只需将执行插入操作时经过的所有结点
v
v
v值加上所插入结点的
p
p
p值,其余操作与红黑树的插入操作相同。
I
N
T
E
R
V
A
L
−
D
E
L
E
T
E
INTERVAL-DELETE
INTERVAL−DELETE:
只需将执行删除操作时经过的所有结点
v
v
v值减去被删除结点的
p
p
p值,其余操作与红黑树的删除操作相同。
F
I
N
D
−
P
O
M
FIND-POM
FIN算法导论读书笔记-第十三章-红黑树