algorithm
  • README
  • 算法题目
    • Page 1
  • 算法基础
    • 堆(大/小顶堆 、优先队列)
      • swift
      • js
      • C++
    • 哈希表(HashTable)
      • 线性探测
        • 稠密哈希表
        • 密集探测哈希表vs线性探测哈希表
      • C拉链法
        • 拉链法是否需要根据负载因子扩容?
      • set的实现
      • map的实现
    • 二叉树
      • 类型
        • AVL树和红黑树的关系与区别比较
      • 存储方式
      • 遍历
        • 前中后序遍历(深度)
          • 递归方式
          • 迭代法
        • 层次遍历(广度)
      • 二叉搜索树
        • 基本概念
        • 代码实现
      • AVL树
        • 基本概念
        • 代码实现
        • 疑问
          • AVL为什么LL的时候右转呢?
          • AVL树中的LR的情况
          • AVL树的调整
          • 删除节点的逻辑
      • 红黑树
        • 基本概念
        • 代码实现
        • 疑问
          • 红黑树和AVL的关系与区别
          • 红黑树和哈希表的关系与区别
          • 为什么有红黑树,比AVL优势在哪里?
    • 运算符
      • 交换两个数(不用临时变量)
  • leetcode结构
    • Javascript
      • 优先队列
    • C++
  • 公司面试题目
    • 汇丰银行
      • 跑步同一个脚印问题
      • 销售系统问题
Powered by GitBook
On this page
  1. 算法基础
  2. 二叉树
  3. 二叉搜索树

基本概念

二叉搜索树(Binary Search Tree, BST)是一种特殊的二叉树,具有以下特性:

1. 基本定义

  • 二叉树:每个节点最多有两个子节点(左子节点和右子节点)。

  • 搜索性质:对于任意节点,其左子树中的所有节点的值都小于该节点的值,右子树中的所有节点的值都大于该节点的值。

2. 主要操作

  • 插入:

    1. 从根节点开始,比较要插入的值与当前节点的值。

    2. 如果小于当前节点的值,则向左子树递归插入;如果大于,则向右子树递归插入。

  • 查找:

    1. 从根节点开始,比较目标值与当前节点的值。

    2. 如果相等,则找到了目标值;如果小于,则向左子树查找;如果大于,则向右子树查找。

  • 删除:

    • 有三种情况:

      1. 删除的节点是叶子节点:直接删除。

      2. 删除的节点有一个子节点:将其子节点连接到其父节点。

      3. 删除的节点有两个子节点:找到右子树中的最小值(或左子树中的最大值)替代被删除的节点,然后递归删除该最小值(或最大值)。

3. 性能

  • 在平衡的情况下,查找、插入和删除操作的时间复杂度为 O(log n)。

  • 在最坏情况下(如插入有序数据),时间复杂度退化为 O(n)。

4. 应用场景

  • 数据存储:用于存储可比较的数据,提供高效的查找、插入和删除。

  • 动态集合:支持动态增删元素的集合,适合实现集合、映射等数据结构。

  • 排序:可以通过中序遍历获得有序的数据。

5. 注意事项

  • 平衡性:普通的二叉搜索树可能在插入时变得不平衡,导致性能下降。因此,通常需要使用自平衡的变种(如AVL树、红黑树等)来确保良好的性能。

如果你需要更具体的实现示例或其他相关内容,请告诉我!

Previous二叉搜索树Next代码实现

Last updated 7 months ago