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

        
相关推荐
清酒难咽18 小时前
算法案例之递归
c++·经验分享·算法
Rabbit_QL18 小时前
【水印添加工具】从零设计一个工程级 Python 图片水印工具:WaterMask 架构与实现
开发语言·python
天“码”行空18 小时前
简化Lambda——方法引用
java·开发语言
让我上个超影吧18 小时前
【力扣26&80】删除有序数组中的重复项
算法·leetcode
z203483152019 小时前
C++对象布局
开发语言·c++
Beginner x_u19 小时前
如何解释JavaScript 中 this 的值?
开发语言·前端·javascript·this 指针
java1234_小锋19 小时前
Java线程之间是如何通信的?
java·开发语言
张张努力变强19 小时前
C++ Date日期类的设计与实现全解析
java·开发语言·c++·算法
沉默-_-20 小时前
力扣hot100滑动窗口(C++)
数据结构·c++·学习·算法·滑动窗口
钱彬 (Qian Bin)20 小时前
项目实践19—全球证件智能识别系统(优化检索算法:从MobileNet转EfficientNet)
算法·全球证件识别