数据结构 - 二叉搜索树 & 平衡二叉搜索树

1. 二叉搜索树(Binary Search Tree)

(1) 定义

二叉搜索树BST,又称 二叉查找树、二叉排序树

  • 任意一个节点的值都 大于 其左子树 所有节点的值
  • 任意一个节点的值都 小于 其右子树 所有节点的值
  • 它的左右子树也是一棵二叉搜索树
二叉搜索树

(2) 复杂度

二叉搜索树可以大大提高搜索数据的效率

  • 添加、删除、搜索的最坏时间复杂度均可优化至O(log{n})

(3) 限定条件

二叉搜索树存储的元素必须具备 可比较性

  • 比如int、double等
  • 如果是自定义类型,需要制定比较方式
  • 不允许为null

2. 平衡二叉搜索树

(1) 二叉搜索树的复杂度

添加、删除节点时,可能会导致 二叉搜索树 退化成 链表

  • 二叉搜索树复杂度可优化至:O(log{n})
  • 链表的复杂度:O(n)
复杂度

(2) 平衡(Balance)

平衡

  • 当节点数量固定时,左右子树的 高度 越接近,这颗二叉树就越平衡(高度越低)

理想平衡

  • 像完全二叉树、满二叉树这样,高度是最小的

(3) 改进二叉搜索树

用尽量少的调整次数 达到适度平衡

  • 在节点的添加、删除操作之后
  • 操作二叉搜索树恢复平衡(减少树的高度)

平衡二叉搜索树:一棵达到适度平衡的二叉搜索树

(4) 平衡二叉搜索树BBST(Balance Binary Search Tree)

平衡二叉搜索树BBST,又称为 自平衡的二叉搜索树

常见的平衡二叉搜索树:

  • AVL树
    Windows NT 内核中广泛使用
  • 红黑树
    C++ STL(比如map、set)
    Java的TreeMap、TreeSet、HashMap、HashSet
    Linux的进程调度
    Ngix的timer管理
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容