二叉排序树与 set、map

本文介绍了二叉排序树的概念、查找、插入和删除操作,强调了二叉排序树在有序数据操作中的优势。此外,还详细讲解了STL中的关联容器,包括集合set、可重集合multiset以及关联数组map,阐述了它们的应用场景和操作方法。
摘要由CSDN通过智能技术生成

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

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

学习目标

  • 理解二叉排序树的概念
  • 理解二叉排序树的查找、插入、删除、构建和简单平衡的过程
  • 掌握 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)。

查找

在二叉排序树 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所指结点插入到右子树中。(新插入结点总是叶子结点)

键值可重复的二叉树(STL 中实现为 multiset),算法略。

删除

在二叉查找树删去一个结点 *p,分三种情况讨论:

(1)若 *p 结点为叶子结点,即 PL(左子树)和 PR(右子树)均为空树,由于删去叶子结点不破坏整棵树的结构,则只需修改其双亲结点的指针为空即可。

(2)若 *p 结点只有左子树 P

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值