BST

二叉搜索树

树与堆核心时间 平均 O(log n)空间 O(n)

左子树都更小、右子树都更大。中序遍历即有序序列。平衡时查找像二分。

动画

8

插入 8:小于当前走左,大于走右。

1 / 7

  • 当前

讲解

有序动态集合:查找、前驱后继、范围查询。AVL / 红黑树是它的平衡形态。

  1. 01插入:从根比较,小走左、大走右,落到空位挂上。
  2. 02查找同理,命中或走到空。
  3. 03删除分三种:叶子直接摘;单子用孩子顶替;双子取中序后继。
  4. 04不平衡会退化成链表,实际工程用红黑树。

易错点

  • 有序插入会得到一条斜链,退化为 O(n)。
  • 递归插入别忘了把子树接回去。

代码

function insert(node, v) {
  if (!node) return { v, l: null, r: null };
  if (v < node.v) node.l = insert(node.l, v);
  else if (v > node.v) node.r = insert(node.r, v);
  return node;
}
function search(node, v) {
  if (!node || node.v === v) return node;
  return v < node.v ? search(node.l, v) : search(node.r, v);
}

相关课题