查找关键字k: 输入一个指向树根的指针和关键字k
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)
迭代版本
ITERACTIVE-TREE-SEARCH(x,k)
while x!=NIL and k!=x.key
if k<x.key
x=x.left
else x=x.right
return x
查找后继: 如果节点x的右子树非空,那么x的后继恰好是x的右子树中的最左节点,如果节点x的右子树为空并且有一个后继y,那么y就是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
插入元素:从树根开始,指针x记录了一条向下的简单路径,查找要替换的输入项的NIL,保持遍历指针y(需要y是因为找到NIL时要知道z属于哪个节点)作为x的双亲
TREE-INSERT(T,z)
y=NIL
x=T.root
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 //tree is empty
elseif z.key<y.key
y.left=z
else y.right=z
一棵有n个不同关键字的随机构建二叉搜索树的期望高度为O(lgn)
二叉搜索树
最新推荐文章于 2024-10-14 23:32:49 发布