代码随想录|Day20|二叉树09|669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

669. 修剪二叉搜索树

思路:利用二叉搜索树的性质,对于每个节点,判断其是否在区间内:

  • 如果节点值 < low,则此节点和其左子树都不在范围内
  • 如果节点值 > high,则此节点和其右子树都不在范围内
  • 如果 low < 节点值 < high,则保留此节点,但需要递归修建其左右子树
class Solution:def trimBST(self, root: Optional[TreeNode], low: int, high: int) -> Optional[TreeNode]:if not root:return None# 如果节点小于low,返回右子树修剪的结果if root.val < low:return self.trimBST(root.right, low, high)# 如果节点大于high,返回左子树修剪的结果elif root.val > high:return self.trimBST(root.left, low, high)# 如果节点在区间内,递归修建左右子树else:root.left = self.trimBST(root.left, low, high)root.right = self.trimBST(root.right, low, high)return root

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

 思路:我们知道,按照中序遍历一个二叉搜索树将获得一个递增数组。因此我们可以将数组二分,中间元素所谓根节点,左边元素作为左子树,右边元素作为右子树,递归下去可以构成平衡二叉搜索树。

class Solution:def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:def helper(left, right):if left > right:return Nonemid = (left + right) // 2root = TreeNode(nums[mid])root.left = helper(left, mid - 1)root.right = helper(mid + 1, right)return rootreturn helper(0, len(nums)-1)

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

什么是累加树?

指在二叉搜索树(BST)的基础上进行转换得到的一种特殊形式的树。在累加树中,每个节点的值被替换为原始二叉搜索树中所有大于该节点值的节点值之和加上该节点自身的值。

思路:我们从最大值开始累加,因此遍历顺序是元素从大到小。我们可以使用反向中序遍历来实现:右中左。

class Solution:def convertBST(self, root: Optional[TreeNode]) -> Optional[TreeNode]:self.sum = 0def traverse(node):if not node:return# 反向中序遍历:右 -> 根 -> 左traverse(node.right)self.sum += node.valnode.val = self.sumtraverse(node.left)traverse(root)return root

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

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

相关文章

MySQL 相关英文单词

1、database[deɪtəbeɪs] n. 数据库&#xff0c;资料库 2、net[net] 网络 3、start[stɑ:t] vt. 开始&#xff1b;启动 4、stop[stɒp] vi. 停止&#xff1b;中止&#xff1b;n. 停止&#xff1b;车站 5、root[ru:t] 根&#xff0c;MySQL 的超级管理员的用户名 6、…

鸿蒙视频播放的实现

文章目录 前言播放效果视频播放的实现总结 一、前言 现在市面上很多应用都跟视频有关&#xff0c;那么在鸿蒙系统上怎么来播放视频呢&#xff0c;今天就讲解视频播放控件&#xff0c;让你也能快速地进行视频播放功能开发。 最后呢&#xff0c;我会提供一个鸿蒙中涉及的主要…

2024年华为OD机试真题-任务处理-Java-OD统一考试(C卷)

题目描述: 在某个项目中有多个任务(用 tasks 数组表示)需要您进行处理,其中 tasks[i] = [si, ei],你可以在 si <= day <= ei 中的任意一天处理该任务。请返回你可以处理的最大任务数。 注:一天可以完成一个任务的处理。 输入描述: 第一行为任务数量 n,1 <= n …

二刷代码随想录——动态规划day47

文章目录 前言动态规知识点 动规五部曲一、198. 打家劫舍二、213. 打家劫舍 II三、337. 打家劫舍 III总结 前言 一个本硕双非的小菜鸡&#xff0c;备战24年秋招&#xff0c;计划二刷完卡子哥的刷题计划&#xff0c;加油&#xff01; 二刷决定精刷了&#xff0c;于是参加了卡子…

元函数与运行期(普通)函数的区别,为什么要用元函数?

看以下面代码你就知道了&#xff1a; /// <summary> /// 求整数所对应的二进制表示中1的个数 /// </summary> /// <typeparam name"Input"></typeparam> /// 创建时间&#xff1a;2024-01-24 抄自&#xff1a;《动手打造深度学习框架》 21…

深度学习模型部署(十)模型部署配套工具二

上篇blog讲了trtexec和onnx_graphsurgeon两个工具&#xff0c;一个用于将onnx转化为trt模型&#xff0c;另一个用于对onnx模型进行修改。这篇blog讲polygraphy和nsight systems&#xff0c;前者用于进行模型优化以及结果验证&#xff0c;后者用于性能分析。 polygraph polygra…

️ 亲身体验!探索工业界最前沿的安全帽数据集,你的工作安全靠它保驾护航!

一、SHWD安全帽佩戴检测数据集&#xff08;Safety helmet (hardhat) wearing detect dataset&#xff09; 介绍 SHWD 提供了用于安全头盔佩戴和人头检测的数据集。它包括7581张图像&#xff0c;其中9044个人体安全头盔佩戴对象&#xff08;正面&#xff09;和111514个正常头部…

渐开线花键不是齿轮?

在和一位小伙伴交流时&#xff0c;他认为齿轮和花键不一样&#xff0c;那花键是不是齿轮呢&#xff1f;老师傅们可以绕开了&#xff0c;我觉得对于一些平时接刚刚接触齿轮&#xff0c;或者很少接触的朋友来说&#xff0c;还是有必要聊一聊这个话题。 首先这个问题并不严谨&…

DeePhage:预测噬菌体的生活方式

GitHub - shufangwu/DeePhage: A tool for distinguish temperate phage-derived and virulent phage-derived sequence in metavirome data using deep learning 安装 conda create -n deephage conda activate deephage pip install numpy pip install h5py pip install ten…

Spring Security入门教程:利用Spring Security实现安全控制

在现今这个数码大展拳脚的时代&#xff0c;安全问题无疑是咱们这些搞软件开发的人需要谨慎应对的一块烫手山芋&#xff0c;无论是那些大型企业应用&#xff0c;还是那种小打小闹的个人项目&#xff0c;对我们宝贵的数据和服务的保护都显得尤为关键。 试想一下&#xff0c;若是…

Java代码基础算法练习-求数据序列的最大值及最小值---2024.3.15

题目 任务描述&#xff1a;输入n个整数&#xff0c;求n个整数的最大值及最小值&#xff0c;并输出相应的位置序号。&#xff08;注&#xff1a;n<10&#xff0c; 位置序号从1开始计算&#xff0c;若存在多个相同值的情形&#xff0c;则输出第1个值的序号&#xff09; 任务要…

深度学习训练结果记录---日志文件写入logger 【简洁明了】

目录 介绍举例1.引入头文件2.封装函数3.在程序入口调用4. 记录训练过程 介绍 在进行深度学习模型训练的过程中&#xff0c;一般会设置log日志&#xff0c;将训练过程的中间结果以及最终结果写入&#xff0c;方便再次打开的时候进行查看。 logging的一些函数这里就不作介绍&…

【Realsense】解决Ubuntu 20.04安装Realsense SDK后realsense-ros报错的问题

最近在Ubuntu 20.04上安装了Realsense SDK&#xff08;版本为2.54.2&#xff09;&#xff0c;但在尝试编译安装realsense-ros&#xff0c;按照Intel官方安装教程执行catkin_clean&#xff08;或者catkin_make&#xff09;&#xff0c;遇到了如下报错&#xff1a; CMake Error …

PTA题解 --- 求整数段和(C语言)

今天是PTA题库解法讲解的第二天&#xff0c;接下来讲解求整数段和&#xff0c;题目如下&#xff1a; 为了解决这个问题&#xff0c;你可以遵循以下的思路&#xff1a; 1. 读取输入的两个整数A和B。 2. 使用一个for循环&#xff0c;从A遍历到B。 3. 在循环中&#xff0c;打印当…

试卷上的水印如何去除?分享3种常用的方法!

在日常生活和工作中&#xff0c;我们经常会遇到一些带有水印的试卷或文档&#xff0c;这些水印不仅影响了我们的阅读体验&#xff0c;还可能对我们的工作和学习产生一定的困扰。那么&#xff0c;如何有效去除试卷上的水印呢&#xff1f;今天&#xff0c;就让我们一起来探讨这个…

渗透测试实战思路分析

免责声明&#xff1a;文章来源真实渗透测试&#xff0c;已获得授权&#xff0c;且关键信息已经打码处理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人…

【LeetCode周赛】第388场周赛

目录 100233. 重新分装苹果 简单100247. 幸福值最大化的选择方案 中等100251. 数组中的最短非公共子字符串 中等100216. K 个不相交子数组的最大能量值 困难 100233. 重新分装苹果 简单 100233. 重新分装苹果 分析&#xff1a; 排序贪心 代码&#xff1a; class Solution {…

Liunx下安装Redis(详细安装)

1、创建一个文件目录 mkdir /opt/redis2、进入安装目录 cd /opt/redis3、下载redis默认安装包 默认是3.0版本的 wget http://download.redis.io/releases/redis4、进行解压 tar -xzvf redis-3.0.7.tar.gz5、进入解压好的文件夹目录 cd redis-3.0.7 6、将redis重新安装到 …

【C++】每日一题 82 删除排序链表中的重复元素

给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回 已排序的链表 。 class ListNode { public:int val;ListNode* next;ListNode(int _val) {val _val;next nullptr;} };ListNode* deleteDuplicates(ListNo…