数据结构C++——搜索树(1) 二叉搜索树

一、定义

搜索树

  • 适合于描述字典的树型结构
  • 比跳表和散列表有更好、或类似的性能
  • 特别对于顺序访问按排名访问,散列表实现时间性能差,使用搜索树实现会有更好的时间性能

二叉搜索树:

  • 可能为的二叉树
  • 一颗非空的二叉搜索树满足特征:
    • 每个元素都有一个关键字,且唯一
    • 根节点左子树的关键字 小于 根节点的关键字
    • 根节点右子树的关键字 大于 根节点的关键字
    • 根节点的左右子树也是二叉搜索树
    • 即:任何节点左子树的关键字小于该节点的关键字,右子树的关键字大于该节点的关键字
  • 二叉搜索树——二叉排序树

在这里插入图片描述

有重复值的二叉搜索树

  • 任何节点左子树的关键字 小于等于 该节点的关键字
  • 任何节点右子树的关键字 大于等于 该节点的关键字

索引二叉树:

  • 二叉搜索树
  • 在每个节点添加一个"leftSize",记录该节点左子树的元素个数
  • leftSize(x):给出一个元素在x为根的子树中的排名(0起始)

在这里插入图片描述
一个元素的名次(Rank)是它在排序后的队列中的位置(在中序序列中的位置)

l e f t S i z e ( x ) = r a n k ( x ) , 在以 x 为根的子树中的名次 leftSize(x) = rank(x),在以x为根的子树中的名次 leftSize(x)=rank(x),在以x为根的子树中的名次

在这里插入图片描述

二、ADT

二叉搜索树 bsTree

实例:

  • 二叉树
  • 每个节点有一个数对,数对的一个成员是关键字,另一个成员是数值
  • 所有元素的关键字各不相同
  • 任何节点左子树的关键字小于该节点的关键字
  • 任何节点右子树的关键字大于该节点的关键字

操作:

  • find(k):返回关键字为k的数对
  • insert§:将数对p插入到搜索树中
  • erase(k):删除关键字为k的数对
  • ascend():按照关键字的升序排列输出所有数对

索引二叉树 IndexedBSTree:
实例:

  • 与bsTree相同
  • 只是每一个节点有一个LeftSize域

操作:

  • find(k):返回关键字为k的数对
  • get(index):返回第index个数对
  • insert§:将数对p插入到搜索树中
  • erase(k):删除关键字为k的数对
  • delete(index):删除第index个数对
  • ascend( ):按照关键字的升序排列输出所有数对

三、二叉搜索树的实现

方法:

// 类binarySearchTree 是类linkedBinaryTree的派生类 
template  <class  K,class  E>
class  binarySearchTree: public linkedBinaryTree <K,E>
{
   
 public:
 	//返回关键字theKey匹配的数对的指针,若不存在匹配的数对,则返回NULL
   pair<const K,E> * find(const K& theKey) const;
    //插入一个数对thePair,如果存在关键字相同的数对,则覆盖
   void 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

边懵懵'.ㅅ'

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值