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

        
相关推荐
吴声子夜歌7 小时前
JavaScript——函数
开发语言·javascript·ecmascript
yunyun321237 小时前
跨语言调用C++接口
开发语言·c++·算法
m0_518019487 小时前
C++中的装饰器模式变体
开发语言·c++·算法
SuperEugene7 小时前
Vue3 + Element Plus 中后台弹窗规范:开闭、传参、回调,告别弹窗地狱|Vue 组件与模板规范篇
开发语言·前端·javascript·vue.js·前端框架
SuperEugene7 小时前
VXE-Table 4.x 实战规范:列配置 + 合并单元格 + 虚拟滚动,避坑卡顿 / 错乱 / 合并失效|表单与表格规范篇
开发语言·前端·javascript·vue.js·前端框架·vxetable
xushichao19897 小时前
高性能密码学库
开发语言·c++·算法
偷懒下载原神7 小时前
【linux操作系统】信号
linux·运维·服务器·开发语言·c++·git·后端
小涛不学习7 小时前
Java面试全攻略(基础 + 集合 + 并发 + JVM + 框架)
java·开发语言
m0_518019488 小时前
C++代码混淆与保护
开发语言·c++·算法
2301_818419018 小时前
Python内存管理机制:垃圾回收与引用计数
jvm·数据库·python