代码随想录算法训练营第二十一天| leetcode669. 修剪二叉搜索树、leetcode108.将有序数组转换为二叉搜索树、leetcode538.把二叉搜索树转换为累加树

news/2024/11/8 14:44:57/文章来源:https://www.cnblogs.com/csfy0524/p/18535017

1 leetcode669. 修剪二叉搜索树

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

文章链接:代码随想录

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

思路:目前想的是分三种情况,第一种情况就是这个数删除左边全部,第二种删除右边的全部,第三种就是根据左右来定吧;返回的值,目前想的是这么干,但是感觉我分析的不对

1.1 自己的代码

这个代码,怎么说呢,过了一些,但是在中间的时候,就删除错误了,有过不了的例子,我觉得问题在于中间的时候,应该有一个返回值的问题,就是有一个继续判断,这个代码写的有点粗暴

# 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 root==None:return Noneif root.val<low:return root.rightelif root.val>high:return root.leftroot.left = self.trimBST(root.left,low,high)root.right = self.trimBST(root.right,low,high)return root

1.2 视频后的思路

问题:遍历的时候,没有考虑到如果在这个节点的右子树的左子树有不满足条件的情况下需要如何遍历

# 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 root==None:return Noneif root.val<low:right = self.trimBST(root.right,low,high)return rightelif 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

1.3 本题小结

  1. 这道题自己尝试的时候就是没考虑如果在他的左边的右边有不满足要求的值或者右边的左边有不符合要求的值应该怎么办,考虑了以后就是正确的

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

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

文章链接:代码随想录

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

思路:有一种用了之前的裁剪方式,但是这里自己写的时候也报错了一点,注意就是终止条件要写,不然会有类似于死循环的感觉吧

2.1 自己的代码

# 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 len(nums)==0:returnmiddle_num = len(nums)//2val = nums[middle_num]node = TreeNode(val)left_num = nums[:len(nums)//2]right_num = nums[len(nums)//2+1:]node.left = self.sortedArrayToBST(left_num)node.right = self.sortedArrayToBST(right_num)return node

2.2 视频后的思路

视频双指针的方法,其实也挺巧妙的,感觉比我的切片方法会节省内存空间一些

# 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]:root= self.traversal(nums,0,len(nums)-1)return rootdef traversal(self,num,left,right):if left>right:return Nonemid = left +(right-left)//2root = TreeNode(num[mid])root.left = self.traversal(num,left,mid-1)root.right = self.traversal(num,mid+1,right)return root

2.3 本题小结

  1. 这种题目,感觉还是要多些,自己看的时候就觉得真的已经掌握挺好的了,自己一动手写,上来就写错了
  2. 主要还是数组里面指针的掌握还没掌握的那么牢固

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

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

文章链接:代码随想录

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

思路:这道题,我理解的是换一种遍历方式,有一种不知道怎么说的,就是先找到最大的那个数值,然后对其作为结点,上一个结点的值等于这个最大的加上自己的值,然后不断累加,最后得到一颗新的二叉树,叫累加数;但是呢,确实不知道怎么下手

3.1 视频后的思路

有一种勇敢的人先享受世界的感觉,做的时候就在想,要不用右中左的遍历顺序?但是觉得没有不敢写

# 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.pre = 0def convertBST(self, root: Optional[TreeNode]) -> Optional[TreeNode]:if root==None:returnself.convertBST(root.right)root.val +=self.preself.pre = root.valself.convertBST(root.left)return root

3.2 本题小结

  1. 这道题主要是思路上面,要敢于下手,我想到了,但是不敢写,纠结了一下,觉得这种方式没学过,不科学不合理,然后决定看完视频在写,发现和我想的一样
  2. 要记住,勇敢的人先享受世界,呜呜呜呜呜呜

4 今日小结

  1. 这四道题,相对而言都比较容易了吧,突然发现之前觉得难的递归我也能明白一些了,有两道题也是自己尝试写出来了
  2. 感慨:勇敢的人先享受世界!!
  3. 二叉树的知识,在这一刻就结束啦,从普通二叉树到平衡二叉树再到后面的二叉搜索树,一步步进步,一步步从看视频写题目到自己可以写出来,进步是有的,但是可以写的更好,希望二刷的时候越来越顺利

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SDN实验报告

SDN上机实验 实验目的能够使用Mininet的实现网络拓扑构建;熟悉Open vSwitch交换机的基本配置;熟悉OpenFlow协议的通信原理掌握pox控制器的基本使用方法;掌握Ryu控制期的基本使用方法;掌握北向应用的基本开发方法实验环境 基础环境选择ubuntu-20.04.6-desktop-amd64 实验内容…

双11买ToDesk远程控制&云电脑,看这一篇就够了!

今年双十一各大商家实在是太卷了,预售定金满减凑单一堆花活。但小编发现ToDesk远程控制&云电脑的双十一活动不一般。 囊括了远程控制各种会员版本的年包优惠,云电脑的计时机包时机活动,充值还送钱,优惠力度大,而且直接减钱,不费脑子就拿下超值价格。小编给大家简单整理了…

Java 面试用什么项目?全是商场秒杀 RPC,我吐了

看了几百份简历,真的超过 90% 的小伙伴的项目是商城、RPC、秒杀、论坛、外卖、点评等等烂大街的项目,人人都知道这些项目烂大街了,但大部分同学还是得硬着头皮做,没办法,网络上能找到的、教程比较完善的就这些项目了,做的话好歹有个项目,不做那就真能写学校做的垃圾学生…

极狐GitLab 签约某清洁能源高科技企业,助力零碳技术开创更加美好的零碳世界

客户背景 该客户是一家全球领先的清洁能源高科技公司,总部位于江苏省。公司自成立之初就致力于为全球客户提供清洁、高效、安全的能源解决方案,希望能用高科技技术让新能源发挥更大价值,让世界变得更加美好。当前,该客户在多个能源领域都有领先的产品和成熟的解决方案,也一…

DAC8568IAPWR 数据手册 具有 2.5V、2ppm/C 内部基准电压的 DAC7568、DAC8168、DAC8568 12/14/16 位、8 通道、超低毛刺、电压输出数模转换器芯片

DAC7568、DAC8168 和 DAC8568 分别为 12 位、14位和 16 位低功耗、电压输出、八通道数模转换器(DAC)。这些器件包括一个 2.5V、2ppm/C 内部基准电压(默认禁用),可提供 2.5V 或 5V 的满量程输出电压范围。内部基准电压初始精度为 0.004%,而且可在 VREFIN/VREFOUT 引脚上提供…

ue4资产序列化从入门到精通: 第一章 初识序列化

一、写作目的:(全文字数4926,阅读大约需25min) 首先,我有一个相关的需求要做,然后在拜读了网络上各大UE4序列化解析的文章后,发现大都讲的很模糊,对新入序列化大门的小白非常不友好。有的直接贴上一大段代码(好似直接糊脸上的不解释连招),也有的讲着讲着嘎然而止,也有的…

Hadoop及Spark环境配置与运行实例

本文章为Hadoop与Spark环境配置及Hadoop环境下使用mapreduce进行wordcount、Spark环境下使用KMeans进行鸢尾花数据集聚类实例运行实验记录。一、参考资料重要说明本文章为大数据分析课程实验之Hadoop与Spark平台配置记录及示例演示,其中Hadoop配置部分绝大多数内容源自参考资料…

salesforce零基础学习(一百四十一)刷新dev sandbox需要强制group

本篇参考:https://help.salesforce.com/s/articleView?id=sf.data_sandbox_selective_access.htm&type=5 背景:最近同事刷新sandbox发现点击create不生效,并且无任何提示(后续可能优化)。习惯了直接创建或者刷新的老司机们可能看不出来Sandbox Access标红提示来着,恰…

TPS26600PWPR 数据手册 一款集成反向输入极性保护的 工业电子保险丝芯片 浪涌保护器

TPS2660x 器件是一系列功能丰富的紧凑型高电压电子保险丝,具有一整套保护 功能)。4.2V 至 60V 的宽电源输入范围可实现对众多常用直流总线电压的控制。器件可以承受并保护由高达 60V 的正负电源供电的负载。集成的背靠背 FET 提供反向电流阻断功能,因此器件非常适合在电源故…

因为采购同行,造成的一次Java heap space 堆内存溢出

Caused by: java.sql.SQLException: Java heap space不多说了,没见过这样的。 报错原因是JVM内存XMX超了 Xms512m -Xmx2048m下班记得打卡

2个月搞定计算机二级C语言——真题(10)解析qg

合集 - 3个月搞定计算机二级C语言(6)1.2个月搞定计算机二级C语言——真题(5)解析10-292.2个月搞定计算机二级C语言——真题(6)解析10-303.2个月搞定计算机二级C语言——真题(7)解析11-034.2个月搞定计算机二级C语言——真题(8)解析11-035.2个月搞定计算机二级C语言——…