算法导论学习笔记-第十二章-二叉查找树

第十二章 二叉查找树

 

总结:这章介绍了二叉查找树,介绍了获得某个节点的前驱、后继的方法,介绍了搜索、插入、删除等操作。

 

1.    二叉查找树

对一颗二叉查找树的任何节点,该节点的左子树中的任何一个节点的值都小于等于该节点的值,该节点的右子树中的任何一个节点的值都大于等于该节点的值。

中序遍历二叉查找树,输出的序列是按序的。遍历操作的复杂度O(n)

 

伪代码

INORDER-TREE-WALK(x)

if x!=NIL

      then INORDER-TREE-WALK(left[x])

              print key[x]

            INORDER-TREE-WALK(right[x])

 

2.    查询

SEARCHMINIMUMMAXIMUMSUCCESSORPREDECESSOR等的运行时间都是O(h),其中h为树的高度。

 

1)查找操作:

 

伪代码

TREE-SEARCH(x,k)

if x=NIL or k=key[x]

      then return x

if k<key[x]

      then return TREE-SEARCH(left[x],k)

      else return TREE-SEARCH(right[x],k)

 

伪代码

ITERATIVE-TREE-SEARCH(x,k)

while x!=NIL and k!=key[x]

      do if k < key[x]

           then x <- left[x]

           else x <- right[x]

return x

 

2)最大值、最小值:

伪代码

TREE-MINIMUM(x)

while left[x]!=NIL

      do x <- left[x]

return key[x]

 

伪代码

TREE-MAXIMUM(x)

while right[x]!=NIL

      do x <- right[x]

return x

 

3)前驱和后继:

伪代码

TREE-SUCCESSOR(x)

if right[x]!=NIL

      return TREE-MINIMUM(right[x])

y <- p[x]

while y!=NIL and x=right[y]

      do x <- y

         y <- p[x]

return y

 

3.    插入

时间复杂度O(h)

 

伪代码

TREE­-INSERT(T,z)

y <- NIL

x <- root[T]

while x!=NIL

      do y <- x

if key[z] < key[x]

           then x <- left[x]

           else x <- right[x]

p[z] <- y

if y=NIL

      then root[T] <- z

else if key[z] < key[y]

            then left[y] <- z

            else right[y] <- z

 

4.    删除

时间复杂度O(h)

 

伪代码

TREE­-DELETE(T,z)

if left[z]=NIL or right[z]=NIL

      then y <- z

      else y <- TREE-SUCCESSOR(T,z)

if left[y]!=NIL

      then x <- left[y]

      else x <- right[y]

if x!=NIL

then p[x] <- p[y]

if p[y]=NIL

      then root[T] <- x

      else if y=left[p[y]]

              then left[p[y]] <- x

              else right[p[y]] <- x

if y!=z

      then key[z] <- key[y]

return y

 

  

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值