二叉搜索樹

查找關鍵字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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章