二叉树练习day.9
669.修剪二叉搜索树
链接:. - 力扣(LeetCode)
题目描述:
给你二叉搜索树的根节点
root,同时给定最小边界low和最大边界high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。 可以证明,存在 唯一的答案 。所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。
示例 1:
输入:root = [1,0,2], low = 1, high = 2 输出:[1,null,2]示例 2:
输入:root = [3,0,4,null,2,null,null,1], low = 1, high = 3 输出:[3,2,null,1]提示:
- 树中节点数在范围
[1, 104]内0 <= Node.val <= 104- 树中每个节点的值都是 唯一 的
- 题目数据保证输入是一棵有效的二叉搜索树
0 <= low <= high <= 104
思路:
与删除二叉树节点的思路一样,遍历二叉树,当前节点如果小于我们需要的区间,则删除该节点的左子树,并且去遍历当前节点的右子树,因为遍历的是二叉树搜索树,因此右子树的值肯定是大于根节点的,不确定右子树的所有元素都在我们需要的区间内,因此需要去遍历,当前节点如果大于我们需要的区间,则删除该节点的右子树,并且去遍历当前节点的左子树,查看是否所有的节点都满足我们的区间
递归实现:
1.确定函数参数和返回值,函数的参数一个为要修剪的二叉树,以及我们的区间范围,返回值应该是修剪后的二叉树
2.确定终止条件,如果当前节点为空,则返回上一个节点,否则查看当前节点的值是否满足我们的条件
3.确定单层递归逻辑,遍历左右子树
代码实现:
/*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ struct TreeNode* trimBST(struct TreeNode* root, int low, int high) {if(!root)return NULL;if(root->val < low){struct TreeNode *tem = root->right;//遍历该节点的右子树,因为右子树比该节点大,但是不一定都在范围内tem = trimBST(root->right, low, high);free(root);return tem;}else if(root->val > high){//遍历该节点的左子树,因为左子树比该节点小,但是不一定都在范围内struct TreeNode *tem = root->left;tem = trimBST(root->left, low, high);free(root);return tem;}root->left = trimBST(root->left,low,high);root->right = trimBST(root->right,low,high);return root; }
108.将有序数组转换为二叉搜索树
链接:. - 力扣(LeetCode)
题目描述:
给你一个整数数组
nums,其中元素已经按 升序 排列,请你将其转换为一棵平衡
二叉搜索树。
示例 1:
输入:nums = [-10,-3,0,5,9] 输出:[0,-3,9,-10,null,5] 解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:
示例 2:
输入:nums = [1,3] 输出:[3,1] 解释:[1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。提示:
1 <= nums.length <= 104-104 <= nums[i] <= 104nums按 严格递增 顺序排列
思路:
与构建二叉树的思路一样,对有序数组进行区间分割,先找到数组中间元素的位置,将其作为根节点,因为数组是递增的,且要构建搜索二叉树,如何按照区间分割的思路来实现
递归实现
1.确定函数的参数和返回值,函数参数应该为有序数组,以及我们要分割的左右区间
2.确定递归终止条件,如果我们数组的左右区间不符合正常情况,则返回空
3.确定单层递归逻辑,找到根节点位置,进行区间的分割,依次创建左右子树
代码实现:
/*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ struct TreeNode *found(int *nums, int left, int right) {if(left > right)return NULL;struct TreeNode *node = (struct TreeNode*)malloc(sizeof(struct TreeNode));int mid = (left + right) / 2;node->val = nums[mid];node->left = found(nums,left,mid-1);node->right = found(nums,mid+1,right);return node; }struct TreeNode* sortedArrayToBST(int* nums, int numsSize) {return found(nums,0,numsSize-1); }
538.把二叉搜索树转化为累加树
链接:. - 力扣(LeetCode)
题目描述:
给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点
node的新值等于原树中大于或等于node.val的值之和。提醒一下,二叉搜索树满足下列约束条件:
- 节点的左子树仅包含键 小于 节点键的节点。
- 节点的右子树仅包含键 大于 节点键的节点。
- 左右子树也必须是二叉搜索树。
注意:本题和 1038: . - 力扣(LeetCode) 相同
示例 1:
输入:[4,1,6,0,2,5,7,null,null,null,3,null,null,null,8] 输出:[30,36,21,36,35,26,15,null,null,null,33,null,null,null,8]示例 2:
输入:root = [0,null,1] 输出:[1,null,1]示例 3:
输入:root = [1,0,2] 输出:[3,3,2]示例 4:
输入:root = [3,2,4,1] 输出:[7,9,4,10]提示:
- 树中的节点数介于
0和104之间。- 每个节点的值介于
-104和104之间。- 树中的所有值 互不相同 。
- 给定的树为二叉搜索树。
思路:
根据二叉搜索树的性质,我们可以知道中序遍历(左中右)得到的是一个递增的数组,因为题目要求我们要得到累加树,因此我们就要从右子树开始访问再依次累加,因此我们的递归顺序就变为了右中左,在实现累加操作时,我们需要使用双指针的思路,一个记录当前节点,另一个记录前一个节点的值,用来实现累加
递归实现:
1.确定函数的参数和返回值,因为我们只是要对树每个节点的值进行操作,因此不需要返回值,传入的参数应该是二叉树
2.确定递归的终止条件,当我们二叉树遍历完成时,递归终止
3.确定单层递归逻辑,先去更新右子树,再去处理根节点,最后出来左子树
代码实现:
/*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ int pre = 0; void fc(struct TreeNode *root) {if(root == NULL)return ;fc(root->right);root->val += pre;pre = root->val;fc(root->left); } struct TreeNode* convertBST(struct TreeNode* root) {pre = 0;fc(root);return root; }
相关文章:
二叉树练习day.9
669.修剪二叉搜索树 链接:. - 力扣(LeetCode) 题目描述: 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变…...
2024年第十七届“认证杯”数学中国数学建模网络挑战赛B题思路
B题 神经外科手术的定位与导航 人的大脑结构非常复杂,内部交织密布着神经和血管,所以在大脑内做手术具有非常高的精细和复杂程度。例如神经外科的肿瘤切除手术或血肿清除手术,通常需要将颅骨打开一个(或几个)圆形窗口,将病变部位暴露在术野中。但当病变部位较深时,就必…...
【vue】slot 匿名插槽 / 具名插槽
slot父组件向子组件传递数据 匿名插槽–直接写 具名插槽–指定名称 父组件中 子组件中: 代码 App.vue <template><h2>App.vue</h2><!-- 匿名插槽 --><Header><a href"1234567890.com">1234567890</a>&…...
FFmpeg: 自实现ijkplayer播放器-02环境搭建
文章目录 安装环境项目工程配置库文件 安装环境 IDE: Qt5.12 库: ffmpeg-4.2.1-win32SDL 项目工程配置 pro文件 TEMPLATE app TARGET SimpleIJKPlayer DESTDIR bin QT core gui widgets #CONFIG debug #DEFINES _UNICODE WIN64 QT_WIDGETS_LIBwin32 { LIBS -L$$PW…...
Redis从入门到精通(十七)多级缓存(二)Lua语言入门、OpenResty集群的安装与使用
文章目录 前言6.4 Lua语法入门6.4.1 初识Lua6.4.2 Hello World6.4.3 变量6.4.3.1 Lua的数据类型6.4.3.2 声明变量 6.4.4 循环6.4.5 函数6.4.6 条件控制 6.5 实现多级缓存6.5.1 安装和启动OpenResty6.5.2 实现ajax请求反向代理至OpenResty集群6.5.2.1 反向代理配置6.5.2.2 OpenR…...
pytest常用钩子函数
1、什么叫钩子函数 在Pytest框架中,钩子函数是一种允许用户扩展或者自定义测试执行过程的机制。钩子函数允许用户在测试的不同阶段插入自定义的代码,以实现特定的行为,操作或处理。这种插入式的机制使得Pytest具有高度的灵活性和扩展性。 如…...
.Net <% %>
<% %> 语法 : <% import namespace"system.data"%> 用来导入后台命名空间 指令用于指定当页和用户控件编译器处理 ASP.NET Web 窗体页 (.aspx) 和用户控件 (.ascx) 文件时所使用的设置。<% %> 语法 : <% name %> <% getstr() %&g…...
【C语言__编译和链接__复习篇2】
目录 前言 一、翻译环境和运行环境 二、翻译环境 2.1 预处理 2.1 编译 2.1.1 词法分析 2.1.2 语法分析 2.1.3 语义分析 2.2 汇编 2.3 链接 三、运行环境 四、简答主线问题 前言 本篇主要讨论以下问题: 主线问题: 1. 源文件(.c)如何转换成(.exe)文件…...
Jmeter —— 自动录制脚本
1、Jmeter配置 1.1新增一个线程组 1.2Jmeter中添加HTTP代理 1.3配置HTTP代理服务器 修改端口 修改Target Cintroller(目标控制器) 修改Grouping(分组) 编辑录制中的包含和排除 在“URL Patterns to include包含模式”中填入.*(123456).*用以过滤请求地址中不包含123456的请求…...
使用python互相转换AVI、MP4、GIF格式视频文件
一、AVI文件转MP4文件 要将AVI格式的视频转换为 MP4,你可以使用 Python的 moviepy 库。以下是一个示例代码,用于将 AVI 文件转换为 MP4 文件: from moviepy.editor import VideoFileClip# 读取 AVI 文件 clip VideoFileClip("input.a…...
11 Php学习:函数
PHP 内建函数Array 函数 PHP Array 函数是 PHP 核心的组成部分。无需安装即可使用这些函数。 创建 PHP 函数 当您需要在 PHP 中封装一段可重复使用的代码块时,可以使用函数。下面详细解释如何创建 PHP 函数并举例说明。 创建 PHP 函数的语法 PHP 函数的基…...
查询电脑用户名和组信息
在命令行里查看电脑名: c:\>hostname 在命令行里,查看组信息: # 显示本地所有的用户组 c:\>net localgroup #显示administrators组包含的用户信息 c:\>net localgroup administrators # 比如我的显示信息: C:\>ne…...
【Godot4.2】CanvasItem绘图函数全解析 - 9.绘制表格
概述 之前介绍TextLine和TextParagraph的时候,提到了用制表符和设定列宽形式来绘制简易表格,但是很明显,单纯使用此种方式很难获得对表格的精确控制。 所以对于表格绘制问题,我决定单独开坑,单独深入研究。 目前比较…...
部署HDFS集群(完全分布式模式、hadoop用户控制集群、hadoop-3.3.4+安装包)
目录 前置 一、上传&解压 (一 )上传 (二)解压 二、修改配置文件 (一)配置workers文件 (二)配置hadoop-env.sh文件 (三)配置core-site.xml文件 &…...
TCP协议简单总结
TCP:传输控制协议 特点:面向连接、可靠通信 TCP的最终目的:要保证在不可靠的信道上实现可靠的传输 TCP主要有三个步骤实现可靠传输:三次握手建立连接,传输数据进行确认,四次挥手断开连接 三次握手建立可靠…...
【Qt 实现录音】
Qt 实现录音源代码: #include <QAudioInput> #include <QAudioDeviceInfo> #include <QAudioRecorder> #include <QFile> #include...
python:算法竞赛入门之一
计算 斐波那契数列(Fibonacci sequence),不受长整型位数限制。 编写 fibonacci.py 如下 # -*- coding: utf-8 -*- """ 计算 斐波那契数列(Fibonacci sequence)""" import sys from …...
【大数据与云计算】虚拟机安装Linux
前言:使用Linux系统对大数据学习必不可少,本文主要介绍虚拟机安装linux的流程 文章目录 一、 下载VMware二、下载Linux三、安装Linux 一、 下载VMware 官网链接 下载VMware-player,一直下一步安装即可。 二、下载Linux 点击链接直接下载&…...
从零开始编写一个cmake构建脚本
简介 本文档介绍cmake构建脚本编写,包含的一些主要元素和命名规范。 cmake构建脚本编写步骤 cmake构建工具版本要明确 # 命令名字要小写,这条语句要求构建工具至少需要版本为3.12或以上 cmake_minimum_required (VERSION 3.12)工程名及库的版本号明确…...
pringboot2集成swagger2出现guava的FluentIterable方法不存在
错误信息 Description: An attempt was made to call a method that does not exist. The attempt was made from the following location: springfox.documentation.spring.web.scanners.ApiListingScanner.scan(ApiListingScanner.java:117) The following method did not ex…...
Flink CDC实战:如何解决Oracle LogMiner每小时60G日志下的性能瓶颈与延迟问题
Flink CDC实战:突破Oracle LogMiner高负载场景的性能优化全攻略 当Oracle数据库每小时产生60GB归档日志时,传统单线程LogMiner解析方案往往陷入性能泥潭。本文将揭示一套经过生产验证的并发LogMiner解析架构,通过智能SCN切分、动态线程池和Re…...
JavaScript代码保护实战:用javascript-obfuscator给你的前端穿上防弹衣
JavaScript代码保护实战:用javascript-obfuscator打造坚不可摧的前端防线 1. 为什么前端代码需要保护? 记得去年参与一个电商项目时,团队花三个月开发的核心促销算法,上线一周就被竞争对手完整"借鉴"。检查发现对方直…...
Llama-3.2V-11B-cot保姆级教学:模型卸载与多版本共存方案
Llama-3.2V-11B-cot保姆级教学:模型卸载与多版本共存方案 1. 项目背景与需求 Llama-3.2V-11B-cot作为一款基于Meta多模态大模型开发的高性能视觉推理工具,在双卡4090环境下表现出色。但在实际使用中,开发者经常面临以下痛点: 模…...
Baseweb表单文件上传组件:从基础到拖拽上传的完整指南
Baseweb表单文件上传组件:从基础到拖拽上传的完整指南 【免费下载链接】baseweb A React Component library implementing the Base design language 项目地址: https://gitcode.com/gh_mirrors/ba/baseweb Baseweb是一个基于React的企业级UI组件库ÿ…...
Hunyuan-MT-7B快速入门:无需代码,用浏览器就能翻译33种语言
Hunyuan-MT-7B快速入门:无需代码,用浏览器就能翻译33种语言 1. 为什么选择Hunyuan-MT-7B翻译模型 在全球化协作日益紧密的今天,语言障碍仍然是许多企业和个人面临的现实挑战。传统翻译工具要么功能有限,要么需要复杂的编程接口&…...
LabelMe图像标注自动化:基于模板匹配的实现方法
LabelMe图像标注自动化:基于模板匹配的实现方法 LabelMe是一款强大的图像多边形标注工具,支持多边形、矩形、圆形、线条、点和图像级标志的标注。本文将介绍如何利用模板匹配技术实现LabelMe图像标注的自动化,帮助用户快速提升标注效率&…...
Yarle终极指南:3分钟完成Evernote到Markdown的无损迁移
Yarle终极指南:3分钟完成Evernote到Markdown的无损迁移 【免费下载链接】yarle Yarle - The ultimate converter of Evernote notes to Markdown 项目地址: https://gitcode.com/gh_mirrors/ya/yarle 还在为Evernote笔记迁移而烦恼吗?Yarle是您最…...
OpenClaw私有化部署详解:Qwen3-VL:30B+飞书机器人配置
OpenClaw私有化部署详解:Qwen3-VL:30B飞书机器人配置 1. 为什么选择私有化部署 去年我在尝试将AI助手引入团队工作流时,遇到了两个棘手问题:一是敏感数据不敢上传到公有云,二是现有解决方案的响应速度总是不尽如人意。直到发现O…...
起重机2吨
2吨起重机作为轻型物料搬运的核心设备,广泛应用于车间、仓库、物流中心等场景,其核心作用在于通过机械结构与动力系统的协同,实现垂直与水平方向的精准位移控制。设备采用高强度合金钢作为主梁材料,配合优化设计的桁架结构&#x…...
沉浸推理的线上聚会:线上剧本杀APP的功能设计
当好友散落在不同的城市,想要围坐一桌来一场酣畅淋漓的推理游戏似乎成了奢望。线上剧本杀APP的出现,打破了空间的限制,让热爱推理与角色扮演的人们能够在线上相聚,共同沉浸在一个个精心编织的故事里。以下从功能体验的角度&#x…...





