代码随想录算法训练营第二十三天 | 二叉树 part 9 | 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

博客围绕LeetCode上的二叉搜索树相关题目展开,包括669.修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树。针对每道题给出思路,如修剪树时根据节点值与范围比较递归处理,还给出了递归代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

669. 修剪二叉搜索树

Leetcode

在这里插入图片描述

思路

在这里插入图片描述
思路感觉很难描述清楚,对于递归的代码我只觉得写得很巧妙,但是感觉自己想是想不出来的。

代码随想录-669

需要重温此链接。

如果root(当前节点)的元素小于low的数值,那么应该递归右子树,并返回右子树符合条件的头结点。

如果root(当前节点)的元素大于high的,那么应该递归左子树,并返回左子树符合条件的头结点。

接下来要将下一层处理完左子树的结果赋给root->left,处理完右子树的结果赋给root->right。

最后返回root节点

代码

递归

# 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 trimBST(self, root: Optional[TreeNode], low: int, high: int) -> Optional[TreeNode]:
        if not root:
            return None
		
		# 处理
        if root.val > high:
            return self.trimBST(root.left, low, high)
        elif root.val < low:
            return self.trimBST(root.right, low, high)
		
		# 返回和连接
        root.left = self.trimBST(root.left, low, high)
        root.right = self.trimBST(root.right, low, high)

        return root

108.将有序数组转换为二叉搜索树

Leetcode
在这里插入图片描述

思路

nums中点位置为root,nums[:mid]root.left, nums[mid+1:]root.right。递归建树。

代码

# 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 sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:
        if not nums:
            return None
        
        mid = len(nums) // 2
        root = TreeNode(nums[mid])

        root.left = self.sortedArrayToBST(nums[:mid])
        root.right = self.sortedArrayToBST(nums[mid+1:])
        return root

538.把二叉搜索树转换为累加树

Leetcode

在这里插入图片描述

思路

反序中序遍历。依次累加。

在这里插入图片描述

代码

递归

# 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 convertBST(self, root: Optional[TreeNode]) -> Optional[TreeNode]:

        prev = None

        def helper(root):
            nonlocal prev

            if not root:
                return None

            helper(root.right)
            if prev:
                root.val += prev.val
                prev = root
            else:
                prev = root
            
            helper(root.left)

        helper(root)
        return root

总结

精美图一张

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值