算法日记 18 day 二叉树

最后三题,二叉树就结束啦!!!

题目:修剪二叉搜索树

669. 修剪二叉搜索树 - 力扣(LeetCode)

给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。 可以证明,存在 唯一的答案 。

所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。

示例 1:

输入:root = [1,0,2], low = 1, high = 2
输出:[1,null,2]
 题目分析:

        和上一题的删除二叉树的结点差不多,对树进行遍历,对于不符合的结点直接删除。对于搜索树来说,寻找在范围内的结点也可以利用他的特点。

public class Solution {public TreeNode TrimBST(TreeNode root, int low, int high) {if(root==null) return null;if(root.val<low){//左边一定不符合,直接抛弃TreeNode right=TrimBST(root.right,low,high);return right;}if(root.val>high){TreeNode left=TrimBST(root.left,low,high);return left;}root.left=TrimBST(root.left,low,high);root.right=TrimBST(root.right,low,high);return root;}
}

题目:将有序数组转为二叉搜索树

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

给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡二叉搜索树。

题目分析:

        之前以及做过几个类似的题目了,大题的思路都是对数组进行分割,这一题也一样。题目中要求平衡树,事实上,有序数组的中间数就相当于搜索树的中结点。所以每次对数组的范围找中间值,就可以构建树了。

public class Solution {public TreeNode SortedArrayToBST(int[] nums) {return traversal(nums,0,nums.Length-1);}public TreeNode traversal(int[] nums,int left,int right){if(left>right) return null;int mind=left+((right-left)/2);//因为是在原数组的索引,所以需要加leftTreeNode root=new TreeNode(nums[mind]);root.left=traversal(nums,left,mind-1);root.right=traversal(nums,mind+1,right);return root;}
}

 题目:把二叉搜索树转为累加树

538. 把二叉搜索树转换为累加树 - 力扣(LeetCode)

给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。

提醒一下,二叉搜索树满足下列约束条件:

  • 节点的左子树仅包含键 小于 节点键的节点。
  • 节点的右子树仅包含键 大于 节点键的节点。
  • 左右子树也必须是二叉搜索树。
 题目分析:

        题目的意思就是将结点的值变成大于等于结点值的所有结点之和。而在搜索树中,大于等于这个结点的范围其实就是结点的右子树范围。

        所以对搜索树进行遍历即可,因为是大于等于,所以我们可以先遍历右子树,并且使用一个值来存结点改变之后的值,方便下一个结点使用。

public class Solution {int pre;//记录前一个结点的值,避免重复累加public TreeNode ConvertBST(TreeNode root) {pre=0;Test(root);return root;}void Test(TreeNode root){if(root==null) return;Test(root.right);//因为是求大于等于,所以先遍历右子树root.val+=pre;pre=root.val;Test(root.left);}
}

对于更详细的解析与其他语言的代码块,可以去代码随想录上查看。

代码随想录 (programmercarl.com)

已刷题目:58

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

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

相关文章

hashcat使用

0.介绍 Hashcat 软件是一款非常强大的、开源的、号称世界上最快的密码破解软件&#xff0c;配合强大的字典&#xff0c;可以破译超过百分之九十的密码。Hashcat 目前支持各类公开算法高达240类&#xff0c;市面上公开的密码加密算法基本都支持&#xff0c;有 Microsoft LM 哈希…

mysql 安装 windows

新版安装 新版本安装 如果出现initializing database无法安装 则用我当前版本传送门 如MySQL 安装时没有developer default 选项 解决方法传送门 如果上述还不行 可以选择full 汉化下载 传送门

基于Redis缓存机制实现高并发接口调试

创建接口 这里使用的是阿里云提供的接口服务直接做的测试&#xff0c;接口地址 curl http://localhost:8080/initData?tokenAppWithRedis 这里主要通过参数cacheFirstfalse和true来区分是否走缓存&#xff0c;正常的业务机制可能是通过后台代码逻辑自行控制的&#xff0c;这…

vue常见题型(1-10)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 2.2双向绑定的原理是什么vue框架采用的是数据双向绑定的方式&#xff0c;由三个重要部分构成2.2.1.ViewModel2.2.2 双向绑定2.2.3.1.编译Compile2.2.3.2.依赖收集 3…

C语言变量与强制类型转换深度解析

在上一篇文章中&#xff0c;小编对数据类型进行了详细的讲解与剖析&#xff0c;所以本篇文章小编要带大家理解变量和强制类型转。还是老规矩&#xff0c;来波鸡汤&#xff0c;学习一定不能着急&#xff0c;无法一下就学明白的知识我们需要给他时间&#xff0c;一定不要在一个知…

JAVA+微信小程序前后端源码 微信OCR识别 识别身份证信息

官方文档:身份证识别 | 微信开放文档 实现效果 : 用的奥巴马的网络图片测试,图片 后端JAVA代码 这里用的若依的后端,前后端分离版的 package com.ruoyi.common.utils;import java.io.File; import java.io.IOException;import org.apache.http.HttpEntity; import org.apac…

SL6605 输入0.8-5.5V 单颗锂电池驱动LED升压恒流限流方案

一、芯片特性 输入电压范围广&#xff1a;SL6605可接受0.8V至5.5V的输入电压&#xff0c;使其能够轻松应对各种锂电池电压波动。升压恒流功能&#xff1a;该芯片具有升压能力&#xff0c;可将低电压输入转换为适合LED驱动的高电压&#xff0c;并保持恒定的输出电流。限流保护&…

ubuntu 安装go和vscode

1 安装Go 打开终端&#xff0c;执行以下命令下载Golang安装包&#xff1a; wget https://golang.org/dl/go1.xx.x.linux-amd64.tar.gz注意&#xff1a;替换命令中的“1.xx.x”为最新版本号&#xff0c;例如&#xff1a;1.23.2. 2. 解压安装包&#xff1a; sudo tar -C /usr/…

[spring源码]spring启动流程

spring启动流程 AnnotationConfigApplicationContext的构造方法 1.父类构造方法&#xff0c;构造一个DefaultListableBeanFactory 在调用AnnotationConfigApplicationContext的构造方法之前&#xff0c;会调用父类GenericApplicationContext的无参构造方法&#xff0c;会构造…

Kafka自动生产消息软件(自动化测试Kafka)

点击下载《Kafka服务端(含Zookeeper)一键自启软件》 点击下载《kafka客户端生产者消费者kafka可视化工具&#xff08;可生产和消费消息&#xff09;》 点击下载《Kafka自动生产消息软件》 1. 前言 在软件开发过程中&#xff0c;Kafka常被用作消息队列来处理特定的业务功能。为…

debian系统安装qt的时候 显示xcb相关文件缺失

如果是安装之后的问题 我们可以选择使用ldd的命令查看当前依赖的so那些文件确实 ldd /home/yinsir/Qt/5.15.2/gcc_64/plugins/platforms/libqxcb.so 本人在进行打包的时候 出现则会个报错 ERROR: ldd outputLine: “libxcb-util.so.1 > not found” ERROR: for binary: “/…

F28379D DAC 寄存器的值千万不要设置成4096啦!

在之前的博客中&#xff0c;更新了如何 使用F28379D的片内DAC&#xff0c;提到DAC为12位的 DAC&#xff0c;因此DAC可以将参考电压分为4096份。不注意的小伙伴可能会将 对应的寄存器的值设置为4096&#xff0c;这样会导致DSP运行至_error_然后停止的哦&#xff0c;如果正在做功…

中研在线教育:开启知识新征程,拓展世界新视野

在当今竞争激烈、知识驱动的时代&#xff0c;教育领域不断涌现出创新型的平台&#xff0c;而中研在线教育无疑是其中一颗璀璨的明星。作为专注于中国研究生知识的在线平台&#xff0c;中研在线教育以其丰富的业务、积极向上的企业价值观和极具感染力的口号&#xff0c;为广大学…

PyQt5实战——多脚本集合包,程序入口QMainWindow(三)

个人博客&#xff1a;苏三有春的博客 系列往期文章&#xff1a; PyQt5实战——多脚本集合包&#xff0c;前言与环境配置&#xff08;一&#xff09; PyQt5实战——多脚本集合包&#xff0c;UI以及工程布局&#xff08;二&#xff09; PyQt程序入口&#xff08;QMainWindow&…

A018基于Spring Boot的民宿租赁系统

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600…

中酱:重新定义“健康三境“

王国维在《人间词话》中提出过人生的三重境界。 “昨夜西风凋碧树。独上高楼&#xff0c;望尽天涯路。”此为第一境界 说的是人的立志之境&#xff1a;直面迷茫&#xff0c;内心坚定不移&#xff0c;明确自己追求的方向。 “衣带渐宽终不悔&#xff0c;为伊消得人憔悴。”此为…

基于ESP32的桌面小屏幕实战[2]:硬件设计之充电管理

1. 硬件基础知识 1.1 原理图设计、PCB设计、PCB&#xff08;电路板&#xff09;、PCBA&#xff08;电路板元器件&#xff09;分别长什么样&#xff1f; 1.2 高低电平 一般可以理解为输出电压VCC就是高电平&#xff0c;输出电压GND&#xff08;一般是0V&#xff09;就是低电平…

有代码VISTA: Visual-Textual Knowledge Graph Representation Learning

摘要 知识图用实体和关系组成的三元组来表示人类的知识。虽然现有的知识图嵌入方法大多只考虑知识图的结构&#xff0c;但最近提出的一些多模态方法利用知识图中实体的图像或文本描述。在本文中&#xff0c;我们提出了视觉文本知识图&#xff08;VTKGs&#xff09;&#xff0c…

C语言 | Leetcode C语言题解之第523题连续的子数组和

题目&#xff1a; 题解&#xff1a; struct HashTable {int key, val;UT_hash_handle hh; };bool checkSubarraySum(int* nums, int numsSize, int k) {int m numsSize;if (m < 2) {return false;}struct HashTable* hashTable NULL;struct HashTable* tmp malloc(sizeo…

Kimi的论文语言润色技巧:38个提示词让你的写作更专业

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 在学术写作中&#xff0c;语言的精准与流畅性是衡量论文质量的重要标准。Kimi作为一款先进的AI助手&#xff0c;为论文润色提供了全新的解决方案。本文将分享38个实用的Kimi提示词&…