0
点赞
收藏
分享

微信扫一扫

pytest之fixture结合conftest.py文件使用+断言实战

鱼满舱 03-29 23:00 阅读 1
算法

669.修剪二叉搜索树

题目链接:669. 修剪二叉搜索树 - 力扣(LeetCode)

文章讲解:代码随想录 (programmercarl.com)

视频讲解:你修剪的方式不对,我来给你纠正一下!| LeetCode:669. 修剪二叉搜索树哔哩哔哩bilibili

思路:

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]:
        # todo 1.判定所有情况的返回值
        # 如果节点为空,直接返回None
        if not root:
            return None

        # 如果节点小于下边界,则删除节点左子树,继续向节点右子树寻找
        if root.val < low:
            # 符合要要求的右子树节点返回
            right = self.trimBST(root.right,low,high)
            return right

        # 如果节点大于上边界,则删除节点右子树,继续向节点左子树寻找
        if root.val > high:
            # 符合要要求的左子树节点返回
            left = self.trimBST(root.left,low,high)
            return left

        # todo 2.根据不同的情况将返回值接收
        root.left = self.trimBST(root.left,low,high)
        root.right = self.trimBST(root.right,low,high)

        return root

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

题目链接:108. 将有序数组转换为二叉搜索树 - 力扣(LeetCode)

文章讲解:代码随想录 (programmercarl.com)

视频讲解:构造平衡二叉搜索树!| LeetCode:108.将有序数组转换为二叉搜索树哔哩哔哩bilibili

思路:

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]:
        # 可以不用判空,当nums为空的话,递归函数中left<right,返回空
        # if not nums:
        #     return
        return self.traveral(nums, 0, len(nums) - 1)

    def traveral(self, nums, left, right):
        if left > right:
            return
        index = (right + left) // 2
        node = TreeNode(nums[index])
        node.left = self.traveral(nums, left, index - 1)
        node.right = self.traveral(nums, index + 1, right)

        return node

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

题目链接:538. 把二叉搜索树转换为累加树 - 力扣(LeetCode)

文章讲解:代码随想录 (programmercarl.com)

视频讲解:普大喜奔!二叉树章节已全部更完啦!| LeetCode:538.把二叉搜索树转换为累加树哔哩哔哩bilibili

思路:

# 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 __init__(self):
        self.sum_ = 0

    def convertBST(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
        if not root:
            return root
        # 右
        self.convertBST(root.right)
        
        # 中
        self.sum_ += root.val
        root.val = self.sum_

        # 左
        self.convertBST(root.left)

        return root

另一个方法是采用双指针法,一个指针cur记录当前节点,一个指针pre记录上一个节点值

class Solution:
    def convertBST(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
        self.pre = 0
        self.traveral(root)
        return root

    def traveral(self, cur):
        if not cur:
            return

        # 右
        self.traveral(cur.right)

        # 中
        cur.val += self.pre
        self.pre = cur.val

        # 左
        self.traveral(cur.left)
举报

相关推荐

0 条评论