当前位置: 首页 > news >正文

代码随想录算法训练营Day21

力扣669.修建二叉搜索树【medium】
力扣108.将有序数组转为二叉搜索树【easy】
力扣538.把二叉搜索树转为累加树【medium】

一、力扣669.修建二叉搜索树【medium】

题目链接:力扣669.修建二叉搜索树
在这里插入图片描述在这里插入图片描述
视频链接:代码随想录

1、思路

  • 涉及到了删除节点,是上一题的进阶

  • 递归

    • 修剪的操作并不是在终止条件上进行的,所以就是遇到空节点返回就可以了。
    • 如果root(当前节点)的元素小于low的数值,那么应该递归右子树,并返回右子树符合条件的头结点。
    • 如果root(当前节点)的元素大于high的,那么应该递归左子树,并返回左子树符合条件的头结点。
    • 在这里插入图片描述
  • 时间复杂度: O ( n ) O(n) O(n)

2、代码

class Solution:
    def trimBST(self, root: Optional[TreeNode], low: int, high: int) -> Optional[TreeNode]:
        if not root:
            return None
        if root.val < low:
            return self.trimBST(root.right, low, high)
        if root.val > high:
            return self.trimBST(root.left, low, high)
        root.left = self.trimBST(root.left, low, high)
        root.right = self.trimBST(root.right, low, high)
        return root

二、力扣108.将有序数组转为二叉搜索树【easy】

题目链接:力扣108.将有序数组转为二叉搜索树
在这里插入图片描述
视频链接:代码随想录

1、思路

  • 如果根据数组构造一棵二叉树。本质就是寻找分割点,分割点作为当前节点,然后递归左区间和右区间。
  • 分割点就是数组中间位置的节点。
  • 如果数组长度为偶数,中间节点有两个,取哪一个都可以,只不过构成了不同的平衡二叉搜索树。
  • 时间复杂度: O ( n ) O(n) O(n)

2、代码

class Solution:
    def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:
        if not nums:
            return None
        m = len(nums) // 2
        return TreeNode(nums[m], self.sortedArrayToBST(nums[: m]), self.sortedArrayToBST(nums[m+1 :]))  

三、力扣538.把二叉搜索树转为累加树【medium】

题目链接:力扣538.把二叉搜索树转为累加树
在这里插入图片描述在这里插入图片描述
视频链接:代码随想录

1、思路

  • 和求最小绝对差和众数那两题做法类似
  • 遍历顺序:右、中、左
  • dfs:深度优先搜索
  • 时间复杂度: O ( n ) O(n) O(n)

2、代码

class Solution:
    def convertBST(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
        s = 0
        def dfs(node:Optional[TreeNode]) -> None:
            if not node:
                return
            dfs(node.right)
            nonlocal s
            s += node.val
            node.val = s
            dfs(node.left)
        dfs(root)
        return root        

相关文章:

  • Py一阶段习题汇总
  • 微型导轨的制造工艺中,热处理的目的是什么?
  • 202521 | 远程调用 | 注册中心
  • Go语言-初学者日记(六) 并发编程
  • Nginx-keepalived-高可用
  • cpp经典数论问题
  • celsius与Fahrenheit
  • C++ STL 详解 ——list 的深度解析与实践指南
  • leetcode120.三角形最小路径
  • 小刚说C语言刷题——第16讲 switch语句
  • C++11详解
  • Spring Boot 与 TDengine 的深度集成实践(三)
  • 利用C++编写操作OpenCV常用操作
  • 编程速递-Delphi is 30 Delphi诞生30周年!
  • MySQL-SQL-DQL语句、DQL基本查询、DQL条件查询、DQL分组查询、聚合函数、DQL排序查询、DQL分页查询
  • 【勒让德公式】欧拉筛-阶乘分解
  • 【硬件开发技巧】如何通过元器件丝印反查型号
  • vector模拟实现(2)
  • 蓝桥杯2024年第十五届省赛真题-拔河
  • 专栏:区块链入门到放弃查看目录
  • 网站架构模板/怎样做品牌推广
  • 天元建设集团有限公司总裁赵纪峰/3seo
  • 鹰潭做网站的/百度sem是什么意思
  • 广东网站建设有限公司/百度seo提高排名费用
  • 网站建设氺首选金手指13/怎么自己制作网站
  • 规划网站站点需要遵循哪些原则/站长工具综合权重查询