二叉搜索树
\(Write-by-尹以豪\)
二叉搜索树的介绍
二叉搜索(Binary Search Tree, BST)是一棵具有特殊性质的二叉树。又可以叫二叉排序树。
二叉搜索树的性质
- 对于节点 \(x\) ,左子树全部节点的权值均比 \(x\) 的权值小。
- 对于节点 \(x\) ,右子树全部节点的权值均比 \(x\) 的权值大。
二叉搜索树的各种操作
二叉搜索树的插入
构建一颗二叉搜索树,就是根据二叉搜索树的性质,不断向二叉搜索树插入的过程。
我们再回顾刚刚二叉搜索树的性质,我们可以很容易就想到解决方法,用变量 \(p\) 表示我们当前正在考虑的节点。很容易根据节点 \(p\) 对应的值,确定需要插入的数应该在左子树还是应该在右子树,并递归处理。直到节点 \(p\) 为空时,在对应节点位置插入。
二叉搜索树的查询
在二叉搜索树中查找权值为 𝑣𝑎𝑙 的结点。
二叉搜索树的性质:
- 对于结点 \(x\),左子树全部结点的权值均比 𝑥 的权值小
- 对于结点 \(x\),右子树全部结点的权值均比 𝑥 的权值大
用变量 \(p\) 表示当前遍历到 \(p\) 号结点。
- 若结点 \(p\) 为空节点,返回 \(\tt Error\)
- 若结点 \(p\) 的权值即为 \(val\) ,返回 \(p\)
- 若结点 \(p\) 的权值小于 \(val\) ,递归到 \(p\) 的左子树查找
- 若结点 \(p\) 的权值大于 \(val\) ,递归到 \(p\) 的右子树查找
二叉搜索树的删除 (重难点)
从二叉搜索树中删去权值为 \(val\) 的结点。
核心 :保持二叉搜索树的性质
二叉搜索树的性质:
- 对于结点 \(x\) ,左子树全部结点的权值均比 \(x\) 的权值小
- 对于结点 \(x\),右子树全部结点的权值均比 \(x\) 的权值大
首先,需要找到权值为 \(val\) 的结点,与前面的查找过程相同,记这个结点为 \(p\)。
除了被删除结点 \(p\) 以外,还需要处理以下结点的信息:
- \(p\) 的父节点
- \(p\) 的子节点
结点 \(p\) 共有几种情况:
- 结点 \(p\) 有 \(0\) 个子节点(叶结点)
直接删去即可,将其父结点对应的子结点置空。
- 结点 \(p\) 有 \(1\) 个子节点
直接将子节点链接到 𝑝 的父节点,作为同位子树。
- 结点 \(p\) 有 \(2\) 个子节点
一般使用左儿子的最大值(或右儿子的最小值)来替代结点 \(p\) 。左儿子的最大值,即左子树中最靠右的叶结点右儿子的最小值,即右子树中最靠左的叶结点删去对应的叶结点,将 \(p\) 的权值修改为左子树的最大值 \(\tt or\) 右子树的最小值。

浙公网安备 33010602011771号