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

669. 修剪二叉搜索树

  • 刷题icon-default.png?t=N7T8https://leetcode.cn/problems/trim-a-binary-search-tree/description/
  • 文章讲解icon-default.png?t=N7T8https://programmercarl.com/0669.%E4%BF%AE%E5%89%AA%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91.html
  • 视频讲解icon-default.png?t=N7T8https://www.bilibili.com/video/BV17P41177ud/?share_source=copy_web&vd_source=af4853e80f89e28094a5fe1e220d9062
  • 题解(递归法):
/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {//递归public TreeNode trimBST(TreeNode root, int low, int high) {//若传入二叉树为空,则直接返回nullif(root == null){return null;}//若当前结点小于规定区间,则当前结点的右分支还有可能在规定区间内//所以需要对当前结点右分支进行递归判断if(root.val < low){TreeNode right = trimBST(root.right, low, high);//将递归下一层得到的新的右分支根结点返回给当前层的父结点//当前root结点的删除return right;}//若当前结点大于规定区间,则当前结点的左分支还有可能在规定区间内//所以需要对当前结点左分支进行递归判断if(root.val > high){TreeNode left = trimBST(root.left, low,high);return left;}//若root在规定范围内//跟结点左分支递归root.left = trimBST(root.left, low, high);//根结点右分支递归root.right = trimBST(root.right, low, high);//返回新的二叉搜索树的根结点//前面也已经处理过只有根结点的情况,所以这里不用特殊处理根结点return root;}
}

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

  • 刷题icon-default.png?t=N7T8https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree/description/
  • 文章讲解icon-default.png?t=N7T8https://programmercarl.com/0108.%E5%B0%86%E6%9C%89%E5%BA%8F%E6%95%B0%E7%BB%84%E8%BD%AC%E6%8D%A2%E4%B8%BA%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91.html
  • 视频讲解icon-default.png?t=N7T8https://www.bilibili.com/video/BV1uR4y1X7qL/?share_source=copy_web&vd_source=af4853e80f89e28094a5fe1e220d9062
  • 题解(递归法):
/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {//递归法(左闭右闭)public TreeNode sortedArrayToBST(int[] nums) {return sortedArrayToBST(nums, 0, nums.length - 1);}public TreeNode sortedArrayToBST(int[] nums, int left, int right){//因为左闭右闭,所以left = right 为合法区间//则left > right为非法区间if(left > right){return null;}//若只有一个结点,则直接充当根结点,返回if(right - left == 0){return new TreeNode(nums[left]);}//若有两个及以上结点,进行递归//注意左闭右闭的递归对应int mid =( left + right ) / 2;TreeNode root = new TreeNode(nums[mid]);//左递归root.left = sortedArrayToBST(nums, left, mid - 1);//右递归root.right = sortedArrayToBST(nums, mid + 1, right);//返回根结点return root;}
}

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

  • 刷题icon-default.png?t=N7T8https://leetcode.cn/problems/convert-bst-to-greater-tree/description/
  • 文章讲解icon-default.png?t=N7T8https://programmercarl.com/0538.%E6%8A%8A%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E8%BD%AC%E6%8D%A2%E4%B8%BA%E7%B4%AF%E5%8A%A0%E6%A0%91.html
  • 视频讲解icon-default.png?t=N7T8https://www.bilibili.com/video/BV1d44y1f7wP/?share_source=copy_web&vd_source=af4853e80f89e28094a5fe1e220d9062
  • 题解(递归法):
/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {//累加//记录累加和int sum;public TreeNode convertBST(TreeNode root) {sum = 0;convertBST1(root);return root;}//由题意得,按右中左顺序遍历,进行累加即可public void convertBST1(TreeNode root){//若传入空树,则直接返回if(root == null){return;}//右处理convertBST1(root.right);//中处理//记录当前累加和sum += root.val;//将当前累加和赋值给当前结点root.val = sum;//左处理convertBST1(root.left);}
}

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

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

相关文章

8.2 新特性 - 透明的读写分离

文章目录 前言1. 安装部署1.1 下载安装包1.2 MySQL Shell1.3 配置 MySQL 实例1.4 启动 ReplicaSet1.5 启动 8.2 Router 2. 测试路由总结 前言 MySQL 8.0 官方推出过一个高可用方案 ReplicaSet 主要由 Router、MySQL Shell、MySQL Server 三个组件组成。 MySQL Shell 负责管理…

【.NET Core】C#编程规范

【.NET Core】C#编程规范 文章目录 【.NET Core】C#编程规范一、概述1.1 结构清晰第一1.2 简洁之风1.3 代码风格保持一致性 二、命名约定三、类型参数命名指南3.1 请使用描述性名称命名泛型类型参数&#xff0c;除非单个字面名称完全具有自我说明性且描述性名称不会增加任何作用…

C++寒假打卡2.19

题目列表 #字母转换 难度系数 ⭐ &#xff08;送分&#xff09; #数位求和 难度系数 ⭐⭐ &#xff08;几乎也是送分&#xff09; #分糖果 难度系数 ⭐⭐⭐ #猴子摘桃 难度系数 ⭐⭐⭐ &#xff08;板字题&#xff09; #最大值 难度系数 ⭐⭐⭐⭐…

设计模式三:工厂模式

工厂模式包括简单工厂模式、工厂方法模式和抽象工厂模式&#xff0c;其中后两者属于23中设计模式 各种模式中共同用到的实体对象类&#xff1a; //汽车类&#xff1a;宝马X3/X5/X7&#xff1b;发动机类&#xff1a;B48TU、B48//宝马汽车接口 public interface BMWCar {void s…

Bert基础(一)--transformer概览

1、简介 当下最先进的深度学习架构之一&#xff0c;Transformer被广泛应用于自然语言处理领域。它不单替代了以前流行的循环神经网络(recurrent neural network, RNN)和长短期记忆(long short-term memory, LSTM)网络&#xff0c;并且以它为基础衍生出了诸如BERT、GPT-3、T5等…

2024全年放假日历表及调休安排 用手机便签设置放假倒计时

对于绝大多数的上班族来说&#xff0c;春节长假已经结束&#xff0c;现在要回归到正常的工作和生活中。为了给生活增加一些“盼头”&#xff0c;很多小伙伴不约而同打开手机日历&#xff0c;查看下个法定节假日是什么时候。下面给大家具体讲一下2024全年放假日历表及调休安排&a…

UE5 C++ 创建可缩放的相机

一.要将相机设置在Pawn类里 1.在MyPawn头文件里&#xff0c;加上摇臂和相机组件 #include "GameFramework/SpringArmComponent.h" #include "Camera/CameraComponent.h" 2.在Pawm里声明SceneComponet&#xff0c;SpringArmComponent,CameraComponent组件…

Excel生成不重复的UUID

第一步&#xff1a;在单元格中使用函数 第二步&#xff1a;下拉批量生成 生成函数如下&#xff1a; CONCATENATE(DEC2HEX(RANDBETWEEN(0,4294967295),8),DEC2HEX(RANDBETWEEN(0,42949),4),,DEC2HEX(RANDBETWEEN(0,42949),4),DEC2HEX(RANDBETWEEN(0,42949),4),DEC2HEX(RANDBETW…

Unity MVC开发模式与开发流程详解

在Unity游戏开发中&#xff0c;采用MVC&#xff08;Model-View-Controller&#xff09;模式是一种非常常见的设计模式。MVC模式将应用程序分为三个部分&#xff1a;模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Controller&#x…

vue3+element Plus+ts 自定义主题色,以及生成主题色各种透明度

目录 思路 安装css-color-function【接收一个颜色值&#xff0c;生成不同的透明度】 获取后台配置的主题色或者使用ColorPicker修改主题色 最终结果如下 思路 本篇文章的主体思路是从element Plus官网引申而来。结合了我以前用vue2element-ui配置主题色生成透明度&#x…

谈谈:你在工作中用到的设计模式!

谈谈:你在工作中用到的设计模式! Hello大家龙年好! 春节的假期转眼间过去,我们也要回归往日的节奏 因为最近和小伙伴们聊天发现,我们普遍在面试中,对被问起设计模式在工作中的应用,既有点熟悉,又有点陌生, 在网上看吧,又感觉鸡肋(为啥?不能解燃煤之急啊!哈哈),所以,为了打破这…

体验即王道:提升B端管理系统用户体验的10大法则

大家好&#xff0c;我是贝格前端工场&#xff0c;专注于前端开发和UI设计&#xff0c;有需求可以私信。本篇从用户体验角度来分析管理系统如何设计和开发。 一、用户体验的重要性 B端管理系统的用户体验对于企业的成功至关重要。 提高工作效率&#xff1a;一个好的用户体验可…

什么是网络安全?一文了解网络安全究竟有多重要!

随着互联网的普及和数字化进程的加速&#xff0c;网络安全已经成为我们生活中不可或缺的一部分。然而&#xff0c;很多人对于网络安全的概念仍然模糊不清。 那么&#xff0c;什么是网络安全&#xff1f;它究竟有多重要呢&#xff1f; 一、网络安全的定义 网络安全是指保护网络…

Sora一出 哪里又要裁员了?

上班前夕迎来大新闻&#xff0c;那就是Sora了&#xff0c;Sora是什么&#xff0c;有什么牛逼之处&#xff0c;怎么实现的&#xff0c;我们跟着官方文档透露出来的一点点信息&#xff0c;简单的捋一捋。 一、Sora是什么 官方给出的定义是&#xff1a;世界模拟器。这很明显有夸大…

js 多对象去重(多属性去重)

需求中发现后端可能没有处理重复数据&#xff0c;这个时候前段可以直接解决。 在 JavaScript 中&#xff0c;可以使用 Set 数据结构来进行多对象的去重。Set 是 ES6 新引入的集合类型&#xff0c;其特点是元素不会重复且无序。 下面是一个示例代码&#xff0c;展示如何通过 S…

three.js 物体下落动画(重力加速度)

效果&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><el-button click"loopFun"> 物体下落…

kubuntu 解决 kwallet 弹窗问题

问题 启动 kubuntu 后, 自动弹框要求验证 kwallet 的密码 查看本次启动中与 kwallet 有关的日志 $ journalctl -b | grep kwallet解决 开启 sddm/gdm 登录后自动解锁 kwallet 的功能 安装 kwallet-pam 模块 一般来说系统自带该模块 $ sudo apt install libpam-kwallet5 l…

机器学习基础(二)监督与非监督学习

导语&#xff1a;更深入地探讨监督学习和非监督学习的知识&#xff0c;重点关注它们的理论基础、常用算法及实际应用场景。 上一节我们深入探索机器学习的根本原理&#xff0c;包括基本概念、分类及如何通过构建预测模型来应用这些理论&#xff0c;详情可见&#xff1a; 机器学…

京东数据分析|京东销售数据怎么查|京东销售数据查询软件分享!

京东销售数据分析对商家来说具有多方面的重要作用&#xff0c;主要体现在以下几个方面&#xff1a; 市场趋势分析&#xff1a; 分析京东平台上的商品销量、销售额和价格走势等数据&#xff0c;可以帮助商家了解当前市场的整体需求趋势&#xff0c;以及不同品类的季节性变化、…

面向未来的全面预算管理,财务团队应具备的技能

当企业置身于当今这个瞬息万变的市场环境中时&#xff0c;每一次的数据分析和战略决策都至关重要。财务团队作为企业提升盈利能力和保持可持续发展的核心&#xff0c;不仅要适应不同的管理需求和不断变化的市场环境&#xff0c;还需要协助企业保持竞争优势和领先地位。经济世界…