二叉搜索树

\(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\) 右子树的最小值。
posted @ 2025-07-14 18:07  StudentE  阅读(13)  评论(0)    收藏  举报