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

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

简单
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。
高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。

示例 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 <= 10(4)
  • -10(4) <= nums[i] <= 10(4)
  • nums 按 严格递增 顺序排列

代码

package __tree/*** Definition for a binary tree node.* type TreeNode struct {*     Val int*     Left *TreeNode*     Right *TreeNode* }*/
func sortedArrayToBST(nums []int) *TreeNode {if len(nums) == 0 {return nil}//先序排列,根左右mid := len(nums) / 2x := nums[mid]root := &TreeNode{x, nil, nil}root.Left = sortedArrayToBST(nums[:mid])root.Right = sortedArrayToBST(nums[mid+1:])return root
}

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

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

  • 节点的左子树仅包含键 小于 节点键的节点。
  • 节点的右子树仅包含键 大于 节点键的节点。
  • 左右子树也必须是二叉搜索树。
    注意:本题和 1038: https://leetcode-cn.com/problems/binary-search-tree-to-greater-sum-tree/ 相同

示例 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 和 10(4)( )之间。
  • 每个节点的值介于 -10(4) 和 10(4) 之间。
  • 树中的所有值 互不相同 。
  • 给定的树为二叉搜索树。

代码

package __tree/*** Definition for a binary tree node.* type TreeNode struct {*     Val int*     Left *TreeNode*     Right *TreeNode* }*/
var pre intfunc convertBST(root *TreeNode) *TreeNode {pre = 0 //这一部很重要traversal(root)return root
}func traversal(cur *TreeNode) {if cur == nil {return}traversal(cur.Right)cur.Val += prepre = cur.Valtraversal(cur.Left)
}
func convertBST(root *TreeNode) *TreeNode {var sum inttraverse(root, &sum)return root
}func traverse(node *TreeNode, sum *int) {if node == nil {return}traverse(node.Right, sum)*sum += node.Valnode.Val = *sumtraverse(node.Left, sum)
}

669. 修剪二叉搜索树

中等
给你二叉搜索树的根节点 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, 10(4)] 内
  • 0 <= Node.val <= 10(4)
  • 树中每个节点的值都是 唯一 的
  • 题目数据保证输入是一棵有效的二叉搜索树
  • 0 <= low <= high <= 10(4)

代码

package __tree/*** Definition for a binary tree node.* type TreeNode struct {*     Val int*     Left *TreeNode*     Right *TreeNode* }*/
func trimBST(root *TreeNode, low int, high int) *TreeNode {if root == nil {return nil}if root.Val < low {r := trimBST(root.Right, low, high)return r}if root.Val > high {l := trimBST(root.Left, low, high)return l}root.Left = trimBST(root.Left, low, high)root.Right = trimBST(root.Right, low, high)return root
}

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

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

相关文章

技术前沿丨Teranode如何实现无限扩容

​​发表时间&#xff1a;2023年9月15日 BSV区块链协会的技术团队目前正在努力开发Teranode&#xff0c;这是一款比特币节点软件&#xff0c;其最终目标是实现比特币的无限扩容。然而&#xff0c;正如BSV区块链协会网络基础设施负责人Jake Jones在2023年6月举行的伦敦区块链大会…

应用密码学期末复习(3)

目录 第三章 现代密码学应用案例 3.1安全电子邮件方案 3.1.1 PGP产生的背景 3.2 PGP提供了一个安全电子邮件解决方案 3.2.1 PGP加密流程 3.2.2 PGP解密流程 3.2.3 PGP整合了对称加密和公钥加密的方案 3.3 PGP数字签名和Hash函数 3.4 公钥分发与认证——去中心化模型 …

php+vue.js流浪动物宠物领养公益网站phpstudy/wamp/xammp

使用公益网站的分为管理员和用户二个权限子模块。 管理员所能使用的功能主要有&#xff1a;首页、个人中心、用户管理、咨询新闻管理、网站公告管理、绝育公告管理、合作医院管理、咨询类型管理、待领养动物管理、动物品种管理、动物领养管理、动物绝育申请管理、系统管理等。 …

fiddler抓包安卓

一、打断点 1、安卓手机和电脑在同一局域网下&#xff0c;手机连接的网络开启手动代理&#xff0c;ip填写电脑ip&#xff0c;端口填写fiddler中配置的端口。 ip查看&#xff1a; 端口配置&#xff1a;tools-options-connections 2、安装证书&#xff0c;手机浏览器输入电脑ip…

【深度学习】KMeans中自动K值的确认方法

1 前言 聚类常用于数据探索或挖掘前期&#xff0c;在没有做先验经验的背景下做的探索性分析&#xff0c;也适用于样本量较大情况下的数据预处理等方面工作。例如针对企业整体用户特征&#xff0c;在未得到相关知识或经验之前先根据数据本身特点进行用户分群&#xff0c;然后再…

22款奔驰GLS450升级香氛负离子 淡淡的幽香

香氛负离子系统是由香氛系统和负离子发生器组成的一套配置&#xff0c;也可以单独加装香氛系统或者是负离子发生器&#xff0c;香氛的主要作用就是通过香氛外壳吸收原厂的香水再通过空调管输送到内饰中&#xff0c;而负离子的作用就是安装在空气管中通过释放电离子来打击空气中…

Linux如何扩增新盘

随笔记录 目录 1.新增磁盘步骤 1.1. 在linux 上添加一个块硬盘 1.2 新增硬盘分区 1.3 初始化新增硬盘分区 1.4 挂载 2.永久挂载 1.新增磁盘步骤 1.1. 在linux 上添加一个块硬盘 1.2 新增硬盘分区 # lsblk -f 可以看到&#xff0c;此时我们新添加进去的磁盘还并未进行分…

基于JSP的网上购书系统的设计与实现

基于JSP的网上购书系统设计与实现 摘要&#xff1a; 随着如今互联网与计算机技术的高速发展&#xff0c;各种先进的技术为人们的生活带来了极大的方便&#xff0c;网络应用领域也一天天扩大。在虚拟网络中买卖交易商品&#xff0c;人们越来越来喜欢这种网上购物方式&#xff0…

【洛谷 B2031】计算三角形面积 题解(顺序结构+海伦公式)

计算三角形面积 题目描述 平面上有一个三角形&#xff0c;它的三个顶点坐标分别为 ( x 1 , y 1 ) , ( x 2 , y 2 ) , ( x 3 , y 3 ) (x_1,y_1),(x_2,y_2),(x_3,y_3) (x1​,y1​),(x2​,y2​),(x3​,y3​)&#xff0c;那么请问这个三角形的面积是多少。 输入格式 输入仅一行…

SpringMvc集成开源流量监控、限流、熔断降级、负载保护组件Sentinel | 京东云技术团队

前言&#xff1a;作者查阅了Sentinel官网、51CTO、CSDN、码农家园、博客园等很多技术文章都没有很准确的springmvc集成Sentinel的示例&#xff0c;因此整理了本文&#xff0c;主要介绍SpringMvc集成Sentinel SpringMvc集成Sentinel 一、Sentinel 介绍 随着微服务的流行&…

拼图 游戏

运行出的游戏界面如下&#xff1a;按住A不松开&#xff0c;显示完整图片&#xff1b;松开A显示随机打乱的图片 User类 package domain;/*** ClassName: User* Author: Kox* Data: 2023/2/2* Sketch:*/ public class User {private String username;private String password;p…

linxu磁盘介绍与磁盘管理

SAS硬盘 300G 600G 900G 容量 SATA硬盘 SSD 固态硬盘 SCSI硬盘 IDE硬盘 df (disk free) 列出文件系统的整体磁盘使用量 df -h du &#xff08;desk used&#xff09; 检查磁盘空间使用量 du --help fdisk 用来磁盘分区 fdisk -l

每日一题(LeetCode)----哈希表--四数相加 II

每日一题(LeetCode)----哈希表–四数相加 II 1.题目&#xff08;454. 四数相加 II&#xff09; 给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < nnu…

后端Java日常实习生面试(七牛云2023年11月14日)

面试岗位为&#xff1a;Java 后端开发实习生 面试时长&#xff1a;60分钟 面试时间&#xff1a;2023年11月14日 首先做一下简单的自我介绍吧面试官说先来说一下 Java 基础吧 多态了解吗&#xff1f;&#xff08;了解&#xff0c;一个行为有不同的表现形式&#xff09; 知道…

Vue diff 算法探秘:如何实现快速渲染

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

Spring第三课,Lombok工具包下载,对应图书管理系统列表和登录界面的后端代码,分层思想

目录 一、Lombok工具包下载 二、前后端互联的图书管理系统 规范 三、分层思想 三层架构&#xff1a; 1.表现层 2.业务逻辑层 3.数据层 一、Lombok工具包下载 这个工具包是为了做什么呢&#xff1f; 他是为了不去反复的设置setting and getting 而去产生的工具包 ⚠️工具…

为计算机设计一个完美的思维模型,帮找bug和漏洞,一起来做渗透测试吧 最赚钱的10种思维模型

芒格 如果我不能淘汰自己一年前的思维模型&#xff0c;这一年我就白过了。&#xff08;终身学习&#xff0c;不断迭代自己。&#xff09; 思维模型是什么&#xff0c;有哪些&#xff1f; 思维模型是用来简化和理解复杂现实世界的概念框架。它们是一种思考和解决问题的工具&a…

QT学习_16_制作软件安装包

1、准备软件exe及其运行环境 参考&#xff1a;Qt学习_12_一键生成安装包_江湖上都叫我秋博的博客-CSDN博客 这篇博客记录了&#xff0c;如何用window的脚本&#xff0c;一键生成一个可以免安装的软件压缩包&#xff0c;解压缩后&#xff0c;点击exe文件就可以直接运行。 这一…

国内如何访问github

1 购买一台美国硅谷的服务器 https://account.aliyun.com/login/login.htm?oauth_callbackhttps%3A%2F%2Fecs-buy.aliyun.com%2Fecs%3Fspm%3D5176.8789780.J_4267641240.2.721e45b559Ww1z%26accounttraceid%3Def6b6cc734bc49f896017a234071bfd9bctf 记得配置公网的ip&#xf…

AtCoder Beginner Contest 330 A~F

A.Counting Passes(暴力) 题意&#xff1a; 给定 n n n个学生的分数&#xff0c;以及及格分 x x x &#xff0c;问多少人及格了。 分析&#xff1a; 暴力枚举&#xff0c;依次判断每个学生的分数即可。 代码&#xff1a; #include <bits/stdc.h> using namespace s…