450. 删除二叉搜索树中的节点

# Definition for a binary tree node.'''搜索二叉树,是一个左子树小于根节点小于右子树的特殊二叉树。'''# 这道题使用递归的方法来做,有删除的节点有四种情况,# 1,是叶子节点。没有孩子。# 2,有一个左孩子。直接让左孩子即为就好了。# 3,有一个右孩子。 直接让右孩子即为。# 4,左右孩子都有。 有两种办法。#  (1),找到左孩子值最大的节点,左子树一直向右遍历。#   (2),找到右孩子值最小的几点,右子树一直向左遍历。class TreeNode:    def __init__(self, val=0, left=None, right=None):        self.val = val        self.left = left        self.right = rightclass Solution:    def deleteNode(self, root: TreeNode, key: int) -> TreeNode:        # 如果root为空,直接返回。        if root is None:            return root        # 先寻找到需要删除的节点。        if root.val > key:            root.left = self.deleteNode(root.left,key)        elif root.val < key:            root.right = self.deleteNode(root.right,key)        else:            # 没有孩子,那么直接删除,然后返回。            if root.left is None and root.right is None:                root = None                return root            # 有左孩子,让左孩子即为。            elif root.left and root.right is None:                tmp = root.left                root = None                return tmp            # 只有右孩子,让右孩子即为。            elif root.right and root.left is None:                tmp = root.right                root = None                return tmp            else:                # # 左右孩子都存在。1,寻找右孩子的最小值。                # curr = root.right                # # 右孩子向左递归,就是右孩子的最小值。                # while curr.left:                #     curr = curr.left                # # 让右孩子的最小值即为。                # root.val = curr.val                # # 删除掉那个节点。                # root.right = self.deleteNode(root.right,curr.val)

                # 2,寻找左孩子的最大值。                curr = root.left                while curr.right:                    curr = curr.right                root.val = curr.val                root.left = self.deleteNode(root.left,curr.val)        return root
(0)

相关推荐

  • 二叉树

    二叉树是每个节点最多有两个子树的树结构.通常子树被称作"左子树"(left subtree)和"右子树"(right subtree)二叉树的性质(特性)性质1 ...

  • Python|二叉树叶子结点问题解决方法

    问题描述键盘输入一颗二叉树,求解其叶子结点个数.示例: 输入:4,2,6,1,3,5输出:3解决方案一棵树当中没有子结点(即度为0)的结点称为叶子结点,简称"叶子".当二叉树为空时 ...

  • 算法创作 | 两数相加问题解决方法

    问题描述给你两个非空的链表,表示两个非负的整数.它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字.请你将两个数相加,并以相同形式返回一个表示和的链表.你可以假设除了数字 0 之外,这 ...

  • ​LeetCode刷题实战235:二叉搜索树的最近公共祖先

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  • Python如何实现深度优先与广度优先?

    公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...

  • (1条消息) 漫画:二叉树系列 第五讲(BST的删除)

    在两节中,我们了解了BST(二叉搜索树)的概念,并且知道了如何在BST中查找一个元素.那我们又如何在BST中去删除一个元素呢?我们将通过本节的例题进行学习! 下面看题:???????????? 01 ...

  • ​LeetCode刷题实战226:翻转二叉树

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  • ​LeetCode刷题实战285:二叉搜索树中的顺序后继

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  • 剑指offer之二叉搜索树的第K个节点

    剑指offer之二叉搜索树的第K个节点

  • ​LeetCode刷题实战255:验证前序遍历序列二叉搜索树

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  • EGG Network阿凡提 公链 EFTalk全球首创POTP二叉交叉共识机制

    EFTalk是由智能合约设计专家与暗网全球顶尖团队Hacker League共同倾力打造的去中心化社交平台 EFTalk是基于EGG永动金融公链上的去中心化社交应用生态,全程智能合约自动化执行,并行了 ...

  • LeetCode刷题进阶之二叉树搜索树中的搜索 (700)

    一.题目 演示示例: 二.测试代码 //方法一 递归/** * Definition for a binary tree node. * public class TreeNode { * int v ...

  • 每日一题 剑指offer(二叉搜索树的后序遍历序列)

    编程是很多偏计算机.人工智能领域必须掌握的一项技能,此编程能力在学习和工作中起着重要的作用.因此小白决定开辟一个新的板块"每日一题",通过每天一道编程题目来强化和锻炼自己的编程能力 ...

  • ​LeetCode刷题实战99:恢复二叉搜索树

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  • ​LeetCode刷题实战98:验证二叉搜索树

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...