二叉搜索树(BST)

简述

二叉查找树(Binary Search Tree),又叫有序二叉树,具有以下3个性质:

  • 左子树如果不为空,那么它所有的节点的值都小于它的根节点
  • 右子树如果不为空,那么它所有的节点的值都大于它的根节点
  • 任意节点的左、右子树都是二叉查找树。

复杂度

  • 时间复杂度

    由于二叉搜索树的查询、插入或删除的时间复杂度取决于目标节点到根节点的距离,即深度。

    二叉搜索树可分为平衡树和非平衡树两大类,注:此处的平衡是指所有叶子的深度趋于平衡。

    • 平衡度最高的二叉树是AVL树,其时间复杂度同二分查找一样为O(logN)
    • 非平衡树最极端的情况是偏斜二叉树,即所有的节点都在根节点的一边,也就是链表结构。此时树的深度为n,其时间复杂度同顺序查找一样为O(n)

    因此,二叉搜索树的时间复杂度介于O(logn)和O(n)之间。

  • 空间复杂度

    二叉搜索树的空间大小只与其节点的个数相关,所以其空间复杂度是O(n)。

遍历方式

二叉搜索树有三种遍历方式,分别是:

  • 先序遍历:根节点→左节点→右节点。
  • 中序遍历:左节点→根节点→右节点,结果是一个有序序列。
  • 后序遍历:左节点→右节点→根节点。

优缺点

  • 优点

    二叉搜索树是介于数组和链表的一种折中方案,数组查找方便但是插入或删除麻烦,而链表则恰好与数组相反。

    相较之下,二叉查找树在查找、插入或删除的时间复杂度都较低,适用于处理大批量的动态数据。

  • 缺点

    构建二叉搜索树本身或维护其平衡需要额外的时间或空间成本。

参考资料

二元搜尋樹 - 维基百科,自由的百科全书

二叉排序树(二叉搜索树)的时间复杂度&空间复杂度_xuxinrk的博客-CSDN博客_二叉查找树的时间复杂度

Comments