[算法导论]第十二章《二叉搜索树》

一、概念

1.定义与性质

(1)设x为二叉查找树中的一个结点,若y是x左子树中的一个结点,则key[y] <= key[x];若y是x右子树中的一个结点,则key[x]<=key[y]
(2)二叉查找树上执行的基本操作的时间与树的高度成正比。

2.结构

(1)结点结构:

关键字key
卫星数据data
分别指向父、左右孩子的指针p, left, right

3.在二叉查找树上的操作

查找一个关键字:SEARCH(x, k)
求最小关键字:MINIMUM(x)
求最大关键字:MAXIMUM(x)
求前驱:PREDECESSOR(x)
求后继:SUCCESSOR(x)
插入一个结点:INSERT(T, z)
删除一个结点:DELETE(z)

4.二叉查找树的应用

1.遍历:中序遍历、先序遍历、后序遍历
2.查找:查找包含某个关键字的结点,查找关键字最大或最小的结点、查找某个结点的前驱或后继

一棵二叉树查找及其中根遍历结果如下图所示:

(1)查找

  在二叉查找树中查找一个给定的关键字k的过程与二分查找很类似,根据二叉查找树在的关键字存放的特征,很容易得出查找过程:首先是关键字k与树根的关键字进行比较,如果k大比根的关键字大,则在根的右子树中查找,否则在根的左子树中查找,重复此过程,直到找到与遇到空结点为止。例如下图所示的查找关键字13的过程:(查找过程每次在左右子树中做出选择,减少一半的工作量)

书上查找过程的递归和非递归形式的伪代码:

TREE_SEARCH(x,k)
   if x=NULL or k=key[x]
       then return x
   if(k<x.key)
       then return TREE_SEARCH(x.left,k)
    else
       then return TREE_SEARCH(x.right,k)


ITERATIVE_TREE_SEARCH(x,k)
  while x!=NULL and k!=x.key
      do if k<x.key
              then x=x.left
           else
              then x=x.right
   return x

&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值