数据结构 二叉搜索树
查询二叉搜索树
查找
TREE-SEARCH(x,k)
if x == NIL or k == x.key
return x
if k < x.key
return TREE-SEARCH(x.left,k)
else return TREE-SEARCH(x.right,k)
最大关键字元素和最小关键字元素
TREE-MINIMUM(x)
while x.left != NIL
x = x.left
return x
TREE-MAXIMUM(x)
while x.right != NIL
x = x.right
return x
后继和前驱
TREE-SUCCESSOR(x)
if x.right != NIL
return TREE-MINIMUM(x.right)
y = x.p
while y !=NIL and x == y.right
x = y
y = y.p
return y
插入和删除
插入
TREE-INSERT (T,z)
y = NIL
x = T.next
while x != NIL
y = x
if z.key < x.key
x = x.left
else x = x.right
z.p = y
if y == NIL
T.root = z
elseif z.key < y.key
y.left = z
else y.right = z
删除
TRANSPLANT
用一棵以 v
为根的子树来替换一棵以 u
为根的子树时,结点 u
的双亲就变为结点 v
的双亲,并且最后 v
成为 u
的双亲的相应孩子。
TRANSPLANT (T,u,v)
if u.p == NIL
T.root = v
elseif u == u.p.left
u.p.left = v
else u.p.right = v
if v != NIL
v.p = u.p
TREE-DELETE (T,z)
if z.left == NIL
TRANSPLANT(T,z,z.right)
elseif z.right == NIL
TRANSPLANT(T,z,z.left)
else
y = TREE-MINIMUM(z.right)
if y.p != z
TRANSPLANT(T,y,y.right)
y.right = z.right
y.right.p = y
TRANSPLANT(T,z,y)
y.left = z.left
y.left.p = y