二叉排序树(BST,也称二叉搜索树)或者是一棵空树,或者是满足下列性质的二叉树:
从根开始,与目标值比较:相等则找到;小于当前结点则进入左子树;大于则进入右子树,直到空(失败)。
沿查找路径下到“应插入位置的父结点”,作为叶子插入(BST 的新结点总是叶子)。
// 查找(递归)
BiTNode *SearchBST(BiTree T, int key) {
if (!T || key == T->data) return T;
if (key < T->data) return SearchBST(T->lchild, key);
else return SearchBST(T->rchild, key);
}
依次插入 50, 30, 70, 20, 40, 60, 80 得到如下 BST:
中序遍历得到 20, 30, 40, 50, 60, 70, 80,递增,符合 BST 性质。
| 要点 | 结论 |
|---|---|
| 定义 | 左 < 根 < 右(递归) |
| 中序遍历 | 严格递增序列 |
| 查找/插入/删除(平均) | $O(\log n)$ |
| 最坏 | $O(n)$(退化成链) |
↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。