二叉排序树与 set、map

 前置知识:二叉树的概念及性质

为了保证学习效果,请保证已经掌握前置知识之后,再来学习本章节!

学习目标

  • 理解二叉排序树的概念
  • 理解二叉排序树的查找、插入、删除、构建和简单平衡的过程
  • 掌握 STL 的容器 mapset 的使用方法及其用途

二叉排序树的概念

二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree)、二叉搜索树,是指一棵空树,或者是具有下列性质的二叉树:

  1. 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值。
  2. 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值。
  3. 它的左、右子树也分别为二叉排序树。
  4. 没有键值相同的结点。

转存失败重新上传取消

二叉搜索树作为一种经典的数据结构,它既有链表的快速插入与删除操作的特点,又有数组快速查找的优势。二叉排序树是基础性数据结构,用于构建更为抽象的期望数据结构,比如 set(集合)、multiset、map(关联数组)、multimap等。

二叉排序树有一个很重要的性质: 中序遍历二叉排序树可以得到一个关键字的递增序列。这也是为什么它叫二叉排序树的原因。

二叉排序树的操作

二叉排序树的查找、插入、删除的复杂度等于树高,期望复杂度均为 O(\log_2 n)O(log2​n),当数列有序时,二叉排序树退化成线性表,此时最坏,复杂度为 O(n)O(n)。

虽然二叉排序树的最坏效率是 O(n)O(n),但它支持动态查询,且有很多改进版的二叉排序树可以使树高为 O(\log_2 n)O(log2​n),如 Treap、Splay、SBT(Size Balanced Tree)、AVL树(平衡树)、红黑树等。这些将在后面学习。

查找

在二叉排序树 b 中查找元素 x 的算法:

(1)若 b 是空树,则查找失败;否则执行(2)。

(2)若 x 等于 b 的根结点的数据域之值,则查找成功;否则执行(3)。

(3)若 x 小于 b 的根结点的数据域之值,则搜索左子树;否则执行(4)。

(4)查找右子树。

插入

向二叉排序树 b 中插入一个结点 s 的算法:

(1)若 b 是空树,则将 s 所指结点作为根结点插入;否则执行(2)。

(2)若 s->data 等于 b 的根结点的数据域之值,则返回;否则执行(3)

(3)若 s->data 小于 b 的根结点的数据域之值,则把 s 插入到左子树中;否则执行(4)。

(4)把s所指结点插入到右子树中。(新插入结点总是叶子结点)

删除

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值