2026.1.2 删除二叉搜索树中的节点

删除二叉搜索树中的节点

python 复制代码
# Definition for a binary tree node.
# 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 root is None:
            return root
        # 遍历搜索树,找到要删除的节点
        if root.val < key:
            root.right = self.deleteNode(root.right, key)
        elif root.val > key:
            root.left = self.deleteNode(root.left, key)
        else:
            if not root.left or not root.right:
                # 如果当前节点只有一个子树,则直接让子树的根节点代替当前节点
                root = root.left if root.left else root.right
            else:
                # 否则找到左子树的最大值或右子树的最小值代替当前节点
                node = root.left
                while node.right:
                    # 找到左子树的最大节点
                    node = node.right
                # 进行值替换,并删除左子树中被替换上来的最大节点
                root.val = node.val
                root.left = self.deleteNode(root.left, node.val)
        return root

        
相关推荐
mr_LuoWei20091 分钟前
类似CASS for autoCAD的平基土石方三维计算工具基本完成
python·三维地形图
曦夜日长7 分钟前
C++ STL容器string(一):string的变量细节、默认函数的认识以及常用接口的使用
java·开发语言·c++
代码中介商9 分钟前
C++ STL 标准模板库完全指南:从容器到迭代器
开发语言·c++·stl
winner888111 分钟前
C++ 构造函数、析构函数、虚函数、虚析构
开发语言·c++
想唱rap12 分钟前
应用层协议与序列化
linux·运维·服务器·网络·数据结构·c++·算法
alwaysrun14 分钟前
Python自动提取邮件订阅链接并解析
python·url·邮件·ai提取
北山有鸟14 分钟前
IS_ERR 判断出错后,再用 PTR_ERR 把它强制转换回 int 型的错误码作为函数的返回值。
java·开发语言
何中应14 分钟前
Conda安装&使用
python·conda·python3.11
格林威17 分钟前
工业视觉检测:提供可视化UI调试工具的实现方式是什么?
开发语言·人工智能·数码相机·ui·计算机视觉·视觉检测·工业相机
重生之我是Java开发战士18 分钟前
【笔试强训】Week3:重排字符串,分组,DNA序列
算法