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

news/2024/10/19 21:40:24

学习资料:https://programmercarl.com/0669.修剪二叉搜索树.html#算法公开课

学习记录:
669.修剪二叉搜索树(直接在原函数上操作,要根据情况用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 Noneif root.val < low:right = self.trimBST(root.right, low, high)return rightif root.val > high:left = self.trimBST(root.left, low, high)return leftroot.left = self.trimBST(root.left, low, high)root.right = self.trimBST(root.right, low, high)return root

108.将有序数组转换为二叉搜索树(前序构造,加traversal函数:取数组中值作为根节点,中左右的构造二叉树)

点击查看代码
# 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 traversal(self, nums, left, right):if left>right:return None# 找到中间位置作为根节点mid = left + (right-left)//2# 构建二叉树root = TreeNode(nums[mid])# 选取左闭右闭的区间root.left = self.traversal(nums, left, mid-1)root.right = self.traversal(nums, mid+1, right)return rootdef sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:root = self.traversal(nums, 0, len(nums)-1)return root

538.把二叉搜索树转换为累加树(处理一个节点的方法是把树中比该节点值大的都加给这个节点;双指针;加一个traversal函数,不用返回值;从大到小,用右中左遍历顺序)

点击查看代码
# 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]:self.pre = 0   # 初始pre指向最大值指向的NULL,则为0self.traversal(root)return rootdef traversal(self, cur):# 不用返回什么,只是在处理selfif not cur:return# 按顺序要反着来遍历,从最大的开始,那大的加给小的值# 所以用右中左self.traversal(cur.right)# 双指针,pre的下一位是curcur.val += self.preself.pre = cur.valself.traversal(cur.left)

PS:二叉树终于学完了,也太多了,训练营已经过去三分之一,坚持就是胜利!二叉树学的比较完善
原来周六也要学习啊,不愧是996的行业技能。今天水过去了,✌
今天吃了大餐,越做题越撑,太爽了。清蒸鲈鱼、回锅肉、包子、面条、清炒油麦菜、核桃、柚子、葡萄

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/73588.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

fastStone Capture截图神器,你想要的功能它都有!

前言 大家好,我是小徐啊。从今天开始,小徐将介绍很多Java开发领域相关的软件工具资源,欢迎大家关注。今天,介绍一款非常小巧,但功能十分强大的图片软件,fastStone Capture。这款工具,主要是图片的截图,编辑,以及屏幕录屏等功能,可以说非常强大了。文末附获取方式。 安…

低功耗4G模组:LCD应用示例

​ 今天我们学习合宙Air780E开发板LCD应用示例,文末【阅读原文】获取最新资料。本文档适用于Air780E开发板关联文档和使用工具lcd-demo: https://gitee.com/openLuat/LuatOS/tree/master/demo/lcdLuatools下载调试工具一、环境准备 1.1 Air780E开发板一套​1.2 屏幕一个 这里…

告别繁琐的云平台开发!IoT_CLOUD之【百度云】

​ 众所周知,市面上有很多云平台,阿里云、腾讯云、中移OneNET、华为云、百度云、涂鸦云、Tlink云等等......并且每家云平台都有自己的协议,工程师要移植不同的SDK代码或基于各家的手册文档对接不同的协议,看着都头大!!! 为解决繁琐的云平台开发困扰,合宙IoT_CLOUD应运而…

低功耗4G模组Air780E快速入门:使用文件系统存储温湿度数据

​ 伙伴们,今天我们来学习合宙低功耗4G模组Air780E快速入门之使用文件系统存储温湿度数据。 一、编写脚本 1.1 准备资料 780E开发板购买链接 780E开发板设计资料 LuatOS-Air780E-文件系统的使用-程序源码demo 合宙的TCP/UDP测试服务器 API使用介绍 780E开发板和DHT11​1.2 程序…

文件目录

知识总览文件目录的基本概念 上节说过,FCB 的有序集合称为文件目录,一个FCB 就是一个文件目录项。与文件管理系统和文件集合相关联的是文件目录,它包含有关文件的属性、位置和所有权等。首先来看目录管理的基本要求:从用户的角度看,目录在用户(应用程序)所需要的文件名和文…

使用MySQL之用通配符进行过滤

1. LIKE操作符 通配符(wildcard): 用来匹配值的一部分的特殊字符。 搜索模式(search pattern): 由字面值、通配符或两者组合构成的搜索条件。 通配符本身实际是SQL的WHERE子句中有特殊含义的字符,SQL支持几种通配符。 为在搜索子句中使用通配符,必须使用LIKE操作符。 L…

20222416 2024-2025-1 《网络与系统攻防技术》实验二实验报告

1.实验内容 1.1 内容总结 后门:特指潜伏于操作系统中专门做后门的一个程序,“坏人”可以连接这个程序,远程执行各种指令。概念和木马有重叠。 netcat:一个底层工具,进行基本的TCP UDP数据收发。常被与其他工具结合使用,起到后门的作用。 Meterpreter:一个能生成后门程序…

测试问卷

main.jsp <%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head><meta charset="UTF-8"><title>测试</title> </hea…