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

        
相关推荐
鹿角片ljp21 分钟前
LeetCode 46. 全排列|吃透回溯
算法·leetcode·职场和发展
鼎艺创新科技34 分钟前
不依赖 UE/Unity:我们如何从零搭建一套国产三维 GIS 渲染引擎
人工智能·算法·unity·游戏引擎·三维电子沙盘
剩下了什么35 分钟前
float32 与 float64 精度陷阱:如何在 Go 中避免错误使用
开发语言·后端·golang
指尖时光.1 小时前
Three.js 超全入门综合案例
开发语言·javascript·ecmascript
暴力求解1 小时前
Linux网络---传输层协议TCP(二)
linux·服务器·开发语言·网络·tcp/ip
程序员三藏1 小时前
Python+requests实现接口自动化测试
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
吴声子夜歌1 小时前
Java面试题——基础(一)
java·开发语言
小庞在加油2 小时前
WinDbg实战:QT/跨平台项目死锁与无响应问题排查指南
开发语言·qt·windbg·工具
Vae_Mars2 小时前
C#中的delegate委托
开发语言·c#
一直走下去-明3 小时前
简单的http抓包解包完整代码
开发语言·python