当前位置: 首页> 科技> IT业 > 二叉树——19.修剪二叉搜索树

二叉树——19.修剪二叉搜索树

时间:2025/9/7 14:14:23来源:https://blog.csdn.net/plutomty/article/details/141471215 浏览次数:0次

力扣题目链接

给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L) 。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。

解题思路:

二叉搜索树具有以下性质:

  • 对于任意节点 root,其左子树上所有节点的值都小于 root.val
  • 其右子树上所有节点的值都大于 root.val

根据这一性质,修剪树的过程可以递归地进行,判断当前节点的值是否在区间 [low, high] 之间,并根据以下规则修剪:

  1. 节点为空:如果当前节点为空(即树的某个分支结束),直接返回 None,表示这个分支不再有节点。

  2. 节点值小于 low:如果当前节点的值小于 low,说明当前节点及其左子树的所有节点的值都小于 low,它们都不符合条件,因此需要修剪掉当前节点和它的左子树。此时只需返回修剪后的右子树(即继续修剪右子树)。

  3. 节点值大于 high:如果当前节点的值大于 high,说明当前节点及其右子树的所有节点的值都大于 high,它们都不符合条件,因此需要修剪掉当前节点和它的右子树。此时只需返回修剪后的左子树(即继续修剪左子树)。

  4. 节点值在 [low, high] 之间:如果当前节点的值在区间内,说明这个节点是符合条件的节点。此时需要递归修剪它的左右子树,并将修剪后的左右子树连接回当前节点的左右子树位置。

完整代码如下:

class Solution:def trimBST(self, root: TreeNode, low: int, high: int) -> TreeNode:if root is None:return Noneif root.val < low:# 寻找符合区间 [low, high] 的节点return self.trimBST(root.right, low, high)if root.val > high:# 寻找符合区间 [low, high] 的节点return self.trimBST(root.left, low, high)root.left = self.trimBST(root.left, low, high)  # root.left 接入符合条件的左孩子root.right = self.trimBST(root.right, low, high)  # root.right 接入符合条件的右孩子return root
class Solution:def trimBST(self, root: TreeNode, low: int, high: int) -> TreeNode:if root is None:return None

如果当前节点为 None,说明我们已经到达树的末端,返回 None 表示该分支结束。

        if root.val < low:# 寻找符合区间 [low, high] 的节点return self.trimBST(root.right, low, high)

如果当前节点的值小于 low,说明当前节点及其左子树的所有节点都小于 low,需要修剪掉。此时只需修剪右子树并返回修剪后的右子树。

        if root.val > high:# 寻找符合区间 [low, high] 的节点return self.trimBST(root.left, low, high)

如果当前节点的值大于 high,说明当前节点及其右子树的所有节点都大于 high,需要修剪掉。此时只需修剪左子树并返回修剪后的左子树。

        root.left = self.trimBST(root.left, low, high)  # root.left 接入符合条件的左孩子root.right = self.trimBST(root.right, low, high)  # root.right 接入符合条件的右孩子

如果当前节点的值在区间 [low, high] 之间,说明当前节点符合要求,保留它,并递归修剪它的左子树和右子树,将修剪后的左右子树重新连接回当前节点。

关键字:二叉树——19.修剪二叉搜索树

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: