📜  数据结构 |二叉搜索树 |问题 3(1)

📅  最后修改于: 2023-12-03 15:10:19.516000             🧑  作者: Mango

数据结构 | 二叉搜索树 | 问题 3
什么是二叉搜索树?

二叉搜索树(Binary Search Tree,简称 BST)是一种特殊的二叉树,它满足以下属性:

  1. 左子树中的所有节点的值都小于根节点的值;
  2. 右子树中的所有节点的值都大于根节点的值;
  3. 左右子树均为二叉搜索树。

根据这些属性,可以通过在 BST 上进行插入、查找、删除等操作,实现高效的数据处理。常见的应用场景包括排序、搜索、遍历等。

问题 3:删除节点

删除 BST 中的一个节点,可以分为以下几步:

  1. 查找要删除的节点;
  2. 如果没有找到,直接返回;
  3. 如果找到了,判断该节点是有 0 个、1 个还是 2 个子节点;
  4. 如果有 0 个子节点,直接删除该节点;
  5. 如果有 1 个子节点,将其子节点移动到被删除节点的位置上;
  6. 如果有 2 个子节点,找到该节点的后继节点,将后继节点的值赋给该节点,然后删除后继节点。

通过实现以下代码,可以完成 BST 中节点的删除操作:

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
        
class Solution:
    def deleteNode(self, root: Optional[TreeNode], key: int) -> Optional[TreeNode]:
        if not root:
            return root
        elif key < root.val:
            root.left = self.deleteNode(root.left, key)
        elif key > root.val:
            root.right = self.deleteNode(root.right, key)
        else:
            if not root.left and not root.right:
                root = None
            elif not root.left:
                root = root.right
            elif not root.right:
                root = root.left
            else:
                minNode = self.findMin(root.right)
                root.val = minNode.val
                root.right = self.deleteNode(root.right, minNode.val)
        return root
        
    def findMin(self, node: TreeNode) -> TreeNode:
        while node.left:
            node = node.left
        return node

其中 deleteNode 方法实现了节点的删除操作,findMin 方法用于查找节点的后继节点。

总结

BST 是一种高效、易于实现的数据结构,能够支持多种常见操作。本文介绍了 BST 中节点的删除操作,通过实现相关代码,可以更好地理解其实现原理。