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

        
相关推荐
一条泥憨鱼1 分钟前
【从0开始学习计算机网络】| TIME_WAIT 为什么是 2MSL,CLOSE_WAIT / TIME_WAIT 堆积怎么排查
服务器·开发语言·网络·计算机网络·网络安全
(Charon)2 分钟前
【C++】 定时器入门:从定时任务到 epoll 驱动
开发语言·c++
亮_一个嵌入式新手6 分钟前
C语言Day21
c语言·开发语言
kcuwu.9 分钟前
第 1 课 · Hello, World 与一个 Go 程序的诞生
开发语言·后端·golang
php@king10 分钟前
golang入门到精通
开发语言·后端·golang
Leo.yuan10 分钟前
Flink + Kafka + Doris 之外的另一条路:FineDataLink 一体化实时数仓方案
开发语言·javascript·ecmascript
2601_9623818611 分钟前
Python异步编程async/await核心用法
python·async/await·事件循环·异步编程·并发调度
量化吞吐机11 分钟前
会写代码学量化,先把数据、规则和执行连清楚
人工智能·python
只睡四小时11 分钟前
端侧推理实战:face-api.js 零后端人脸识别踩坑记
开发语言·javascript·ecmascript
某不知名網友16 分钟前
C++ 深浅拷贝:从默认拷贝到 Rule of Five
java·开发语言