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

        
相关推荐
island13145 小时前
CANN GE(图引擎)深度解析:计算图优化管线、内存静态规划与异构任务的 Stream 调度机制
开发语言·人工智能·深度学习·神经网络
坚持就完事了5 小时前
Java中的集合
java·开发语言
摘星编程5 小时前
深入理解CANN ops-nn BatchNormalization算子:训练加速的关键技术
python
魔芋红茶5 小时前
Python 项目版本控制
开发语言·python
lili-felicity5 小时前
CANN批处理优化技巧:从动态批处理到流水线并行
人工智能·python
一个有梦有戏的人5 小时前
Python3基础:进阶基础,筑牢编程底层能力
后端·python
云小逸5 小时前
【nmap源码解析】Nmap OS识别核心模块深度解析:osscan2.cc源码剖析(1)
开发语言·网络·学习·nmap
冰暮流星5 小时前
javascript之二重循环练习
开发语言·javascript·数据库
风指引着方向5 小时前
自定义算子开发入门:基于 CANN op-plugin 的扩展实践
开发语言
dazzle5 小时前
机器学习算法原理与实践-入门(三):使用数学方法实现KNN
人工智能·算法·机器学习