NOI大纲——普及组——二叉搜索树

二叉搜索树

二叉搜索树(Binary Search Tree,简称BST)是一种特殊的二叉树,它具有以下几个特点:

  1. 节点的左子树上的所有节点的值都小于或等于该节点的值
  2. 节点的右子树上的所有节点的值都大于或等于该节点的值
  3. 每个节点的左右子树也都是二叉搜索树

这些特点使得二叉搜索树在进行搜索、插入和删除操作时非常高效。具体来说,在平均情况下,这些操作的时间复杂度都是 (O(\log n)),其中 (n) 是树中的节点数。

二叉搜索树的基本操作

  1. 搜索(Search)

    • 从根节点开始,比较目标值与当前节点的值:

      • 如果目标值等于当前节点的值,则搜索成功;

      • 如果目标值小于当前节点的值,则在左子树中继续搜索;

      • 如果目标值大于当前节点的值,则在右子树中继续搜索。

  2. 插入(Insert)

    • 从根节点开始,找到目标值应该插入的位置,保持二叉搜索树的性质。
    • 如果目标值小于当前节点的值,则插入到左子树中;
    • 如果目标值大于当前节点的值,则插入到右子树中。
  3. 删除(Delete)

    • 删除操作稍微复杂一些,分为三种情况:
      1. 要删除的节点是叶子节点(没有子节点),直接删除即可。
      2. 要删除的节点有一个子节点,用该子节点替代要删除的节点。
      3. 要删除的节点有两个子节点,需要找到该节点的中序后继(右子树中最小的节点)或中序前驱(左子树中最大的节点),用这个节点的值替换要删除的节点的值,然后删除这个节点。

示例

假设我们有以下一组数据:[5, 3, 8, 2, 4, 7, 9],构建的二叉搜索树如下:

复制代码
      5
     / \
    3   8
   / \ / \
  2  4 7  9
  • 搜索 4:从根节点 5 开始,4 < 5,往左走;到达 3 节点,4 > 3,往右走;到达 4 节点,找到目标值。
  • 插入 6:从根节点 5 开始,6 > 5,往右走;到达 8 节点,6 < 8,往左走;到达 7 节点,6 < 7,往左走,插入 6 节点。
  • 删除 3:节点 3 有两个子节点,找到 4(中序后继)替换 3,然后删除节点 4

二叉搜索树因其高效的操作性能,在许多应用中被广泛使用,如数据库索引和内存中的数据结构。

相关推荐
未来之窗软件服务26 分钟前
操作系统应用(三十三)php版本选择系统—东方仙盟筑基期
开发语言·php·仙盟创梦ide·东方仙盟·服务器推荐
是Dream呀31 分钟前
昇腾实战|算子模板库Catlass与CANN生态适配
开发语言·人工智能·python·华为
零匠学堂202533 分钟前
移动学习系统,如何提升企业培训效果?
java·开发语言·spring boot·学习·音视频
不会c嘎嘎37 分钟前
【数据结构】AVL树详解:从原理到C++实现
数据结构·c++
小杨快跑~40 分钟前
从装饰者到桥接再到工厂:模式组合的艺术
java·开发语言·设计模式
say_fall43 分钟前
C语言编程实战:每日一题:随机链表的复制
c语言·开发语言·链表
却话巴山夜雨时i44 分钟前
394. 字符串解码【中等】
java·数据结构·算法·leetcode
haing20191 小时前
使用黄金分割法计算Bezier曲线曲率极值的方法介绍
算法·黄金分割
拾贰_C1 小时前
【Python | Anaconda】 python-Anaconda 一些命令使用
开发语言·python
leoufung1 小时前
LeetCode 230:二叉搜索树中第 K 小的元素 —— 从 Inorder 遍历到 Order Statistic Tree
算法·leetcode·职场和发展