二叉搜索树

入门

BST 把"大小关系"编码进树形结构里。

二叉搜索树

按输入顺序插入,能直观看到 BST 如何把大小关系编码成左右分支。

AlgoAnim · 二叉搜索树

待机

速度
待机
// 源代码
1struct Node {
2    int value;
3    Node* left;
4    Node* right;
5    Node(int v) : value(v), left(nullptr), right(nullptr) {}
6};
7
8Node* insert(Node* root, int value) {
9    if (root == nullptr) return new Node(value);
10    if (value < root->value) root->left = insert(root->left, value);
11    else if (value > root->value) root->right = insert(root->right, value);
12    return root;
13}

复杂度分析

时间 平均 O(log n), 最坏 O(n)
空间 O(n)
最优 平衡时 O(log n)
最坏 退化时 O(n)

算法讲解

二叉搜索树要求任意节点左子树值都小于它,右子树值都大于它,因此中序遍历会得到有序序列。

查找、插入和删除都沿着比较方向一路向下,所以平均情况下效率较高。

但如果插入顺序很差,BST 会退化成链表,复杂度随之恶化到 O(n)。

这正是平衡树出现的原因:它们试图在动态更新后仍保持树高可控。