📜  离散数学二进制搜索树

📅  最后修改于: 2020-12-23 01:05:39             🧑  作者: Mango

二叉搜索树

二进制搜索树具有以下属性:左侧节点的值小于指向该节点的节点,右侧节点的值大于指向该节点的节点。

“二分搜索树”中的节点不必指向其值紧随其后的节点。

示例:图中显示的树是二叉搜索树。

插入二叉搜索树:考虑一个二叉树T。假设我们给T插入了一个ITEM信息。该ITEM作为叶子插入到树中。以下步骤说明了在二进制搜索树T中插入ITEM的过程。

  • 将ITEM与根节点进行比较。
  • 如果ITEM> ROOT NODE,则继续执行正确的子节点,它成为正确子树的根节点。
  • 如果ITEM
  • 重复上述步骤,直到遇到一个没有左右子树的节点。
  • 现在,如果ITEM大于节点,则将ITEM作为右子节点插入;如果ITEM小于节点,则将ITEM作为左子节点插入。

示例:将3、1、4、6、9、2、5、7插入最初为空的二进制搜索树后,显示二进制搜索树。

解决方案:在空的二进制搜索树中插入以上节点如图所示:

二进制搜索树中的删除:考虑一个二进制树T。假设我们要从二进制搜索树中删除给定的ITEM。为了从二叉搜索树中删除一个ITEM,我们有3种情况,这取决于被删除节点的子节点数。

  • Deleted Node没有子节点:删除没有子节点的节点非常简单,因为将节点替换为null。
  • 删除的节点只有一个子节点:用唯一的子节点替换已删除节点的值。
  • 删除节点只有两个子节点:在这种情况下,请用值最接近已删除节点的节点替换已删除节点。为了找到最接近的值,我们向左移动一次,然后再向右移动一次。该节点称为直接前任节点。现在,使用前一父节点替换已删除节点的值,然后使用case1或case2删除替换的节点。

示例:显示删除根节点后,图(viii)中显示的二叉树。

解决方案:要删除根节点,请首先用根中最接近的元素替换根节点。为此,请先向左移动一个步骤,然后再向右移一个尽可能远的位置,然后删除替换的节点。删除后的树如图: