Leetcoder Day20| 二叉树 part09+总结

news2024/9/23 5:27:48

语言:Java/Go

669. 修剪二叉搜索树

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

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

本题实际上是查找和删除的工作,不过可能涉及不止一个节点的操作。当遇到边界外的值,就进行删除,如果比low小,则将当前根节点及其左子树都删除,返回其右子树;如果比high大,则删除右子树,返回左子树。

class Solution {
    TreeNode traversal(TreeNode root, int low, int high){
        if(root==null) return root;
        if(root.val<low){
            return traversal(root.right, low, high);
        }
        if(root.val>high){
            return traversal(root.left, low, high);
        }
        root.left=traversal(root.left, low, high);
        root.right=traversal(root.right, low, high);
        return root;
    }
    public TreeNode trimBST(TreeNode root, int low, int high) {
        return traversal(root, low, high);
    }
}

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

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

高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。

这道题思路就比较简单,二叉搜索树的中序遍历本身就是有序数组,所以反过来将有序数组按照中序构建即为二叉搜索树。但是注意题设要求高度平衡,因此也要注意左右子树的高度差。不过如果从数组中间取根节点,也就会保证平衡了。

class Solution {
    TreeNode traversal(int[] nums, int left, int right){
        if(left>right) return null;
        int mid=left + ((right - left) / 2);
        int rootValue=nums[mid];
        TreeNode root= new TreeNode(rootValue);
        root.left=traversal(nums, left, mid-1);
        root.right=traversal(nums, mid+1, right);
        return root;
    }
    public TreeNode sortedArrayToBST(int[] nums) {
        return traversal(nums, 0, nums.length-1);
    }
}

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

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

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

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

这道题的题设读起来比较拗口,翻译一下就是如果二叉树中有节点的值大于等于当前的节点,便将那些值累加变成当前节点新的值。也就是先将二叉搜索树用中序遍历得到一个有序的数组,然后将数组从后向前,按照中序遍历累加后填回树中。中序遍历的顺序是左中右,从后向前顺序就变成了右中左。这里还需要定义一个前指针来记录当前节点的前一个节点,方便进行累加。本题不用返回树而是返回数组,所以递归的类型定义为void。

 class Solution {
    int pre=0;
    void traversal(TreeNode root){
        if(root==null) return;
        traversal(root.right);
        root.val+=pre;
        pre=root.val;
        traversal(root.left);
    }
    public TreeNode convertBST(TreeNode root) {
        traversal(root);
        return root;
    }
}

⚠️注意这里pre一定要作为全局变量,如果定义到递归里面,就会在每次调用递归的时候进行更新,没有办法起到累加的作用。

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

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

相关文章

一些不得不知道的概念!吴恩达deeplearning.ai:人工智能的导论

文章目录 强人工智能 AGI人工智能的分类深度学习AGI可能实现的一些证据一种学习算法的假设具体的例子 为什么人工智能如此高效 以下内容有任何不理解可以翻看我之前的博客哦 强人工智能 AGI 强人工智能也叫做通用人工智能&#xff0c;是人工智能学科发展的一个重要目标。 人…

Bean的声明周期

1.创建Bean对象&#xff08;调用无参数构造&#xff09; 2.给bean对象设置相关属性&#xff08;依赖注入&#xff09; 3.bean后置处理器&#xff08;初始化前执行&#xff0c;类似于过滤器和拦截器&#xff09; 首先要定义一个类MyBeanPost&#xff0c;实现BeanPostProcessor…

Linux基础 7:自定义shell的编写

自定义shell的编写 一.自定义shell的编写。1.打印命令行提示符。2.获取用户输入字符串进行字符串分割保存。3.调用系统调用接口执行命令&#xff08;使用子进程&#xff09;4.对于内建命令的特殊处理。1.cd2.cd 特殊符号识别&#xff1a; 5.export和echo作为内建命令&#xff1…

动态规划3,地下城游戏

思路&#xff1a; 经验题目要求 a.以某个位置为结尾… dp[i][j]表示&#xff1a;走到【i&#xff0c;j】位置的时候&#xff0c;所需要的最初最低血量。 b.以某个位置为起点 dp[i][j]表示&#xff0c;从【i&#xff0c;j】出发&#xff0c;到达终点&#xff0c;所需要的最低初…

微信小程序云开发入门

写在前面&#xff1a; 参考的课程是咸虾米老师在b站的课&#xff1a;2.2.在页面展现云数据库的内容_哔哩哔哩_bilibili 云开发官方文档&#xff1a;微信开放文档 1、什么是云开发&#xff1f; 用自己的话来说就是把服务器和后台都搭在腾讯开发的服务器上。 2、如何开通云开发…

HCIA-HarmonyOS设备开发认证V2.0-IOT硬件子系统-WatchDog

目录 一、 WATCHDOG 概述功能简介基本概念 二、WATCHDOG 模块相关API三、WATCHDOG HDF驱动开发3.1、开发步骤(待续...) 坚持就有收获 一、 WATCHDOG 概述 功能简介 看门狗&#xff08;Watchdog&#xff09;&#xff0c;又称看门狗计时器&#xff08;Watchdog timer&#xff0…

【AI数字人-论文】RAD-NeRF论文

文章目录 前言模型框架动态的NeRF前处理头部模型音频特征眼部控制头部总体表示 躯干模型loss 结果参考 【AI数字人-论文】AD-NeRF论文 前言 本篇论文有三个主要贡献点&#xff1a; 提出一种分解的音频空间编码模块&#xff0c;该模块使用两个低维特征网格有效地建模固有高维音…

关于Kinect 互动沙盘 深度图 Shader Graph 分层

把Kinect的深度图穿给Shader Graph using com.rfilkov.kinect; using UnityEngine; using UnityEngine.UI; public class GetDepthTex : MonoBehaviour { public Material Mat_SandTable; void Update() { Mat_SandTable.SetTexture("_MainTex"…

LabVIEW串口通信的激光器模块智能控制

LabVIEW串口通信的激光器模块智能控制 介绍了通过于LabVIEW的VISA串口通信技术在激光器模块控制中的应用。通过研究VISA串口通信的方法和流程&#xff0c;实现了对激光器模块的有效控制&#xff0c;解决了数据发送格式的匹配问题&#xff0c;为激光器模块的智能控制提供了一种…

Open CASCADE学习|几何数据结构

在几何引擎内一般把数据分成两类&#xff1a;几何信息与拓扑信息。二者可以完整地表达出实体模型&#xff0c;彼此相互独立、又互相关联。几何信息是指构成几何实体的各几何元素在欧式空间中的位置、大小、尺寸和形状信息。例如一条空间的直线&#xff0c;可以用两端点的位置矢…

019—pandas 计算实验仪器正常运行周期时长

需求&#xff1a; 对指定两个状态作为一个周期&#xff0c;并计算出周期内的差值&#xff0c;写到周期结束所在的行上。pandas 非常适合实现此类有着较为复杂逻辑的问题。 思路&#xff1a; 这个问题的难点是状态的不规律性&#xff0c;如何才能准确找出所有 T 和 C 的周期。…

python 打包 apk

转换之前python代码需要使用指定的框架才能转换&#xff0c;列如&#xff1a;kivy from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.uix.button import Buttonimport time import pyautogui import threadingstatus False# 这是一个将被线程执…

本博客工程源码总目录----方便你快速找到自己喜欢的项目

目录 1、前言2、本人项目总分类3、FPGA图像处理类项目-->快速查找3.1、图像采集-->MIPI视频类3.2、图像采集-->SDI视频类3.3、图像采集-->PAL视频类3.4、图像采集-->Cmeralink视频类3.5、图像转换-->LVDS视频转换3.6、图像缩放&#xff08;纯Verilog版本HLS版…

QEMU开发入门

1. 简介 QEMU&#xff08;Quick EMUlator&#xff09;是一个开源的虚拟化软件&#xff0c;它能够模拟多种硬件平台&#xff0c;并在这些平台上运行各种操作系统。QEMU可以在不同的主机架构之间进行虚拟化&#xff0c;例如x86、ARM、PowerPC、Risc-V等。QEMU是一个功能强大且灵…

【竞技宝jjb.lol】LOL:wayward奎桑提主宰团战 WE2-1力克IG

北京时间2024年2月24日&#xff0c;英雄联盟LPL2024春季常规赛继续进行&#xff0c;昨日共进行三场比赛&#xff0c;第二场比赛由IG对阵WE。本场比赛双方前两局战至1-1平&#xff0c;决胜局WE中期抓住IG失误后拿下大龙奠定胜局&#xff0c;最终WE2-1力克IG。以下是本场比赛的详…

二次元风格个人主页HTML源码

源码介绍 直接上传服务器压缩包解压就完事了&#xff0c;修改index.html内代码即可&#xff0c;注释写的很全&#xff0c;替换图片在文件夹img&#xff0c;只有前端&#xff0c;没有后台&#xff0c;大佬如果需要&#xff0c;可以自行添加后台。本源码非常适合个人工作室主页。…

利用psutil库检查脚本是否在运行

摘要 如果要判断某一脚本是否在运行&#xff0c;可以通过psutil库获取所有进程的cmdline&#xff0c;并判断指定的文件名是否在cmdline中。 目录 1.psutil库简介 2.检查代码及说明 2.1检查思路 2.2异常捕获 2.3执行方法 1.psutil库简介 psutil 是一个跨平台&#xff08;…

Optimization for Deep Learning

Notations: : model parameters at time step or : gradient at used to compute : momentum accumulated from time step to time step , which is used to cpmpute Optimization What is Optimization about? 找到一组参数&#xff0c;使得 最小&#xff0c;或者说是…

内容安全补充

第十一天 密码学 近现代加密算法 古典加密技术 --- 算法保密原则 近现代加密技术 --- 算法公开&#xff0c;密钥保密 对称加密算法&#xff0c;非对称加密算法 对称加密 --- 加密和解密的过程中使用的是同一把密钥。 所以&#xff0c;对称加密所使用的算法一定是一种双向…

概率基础——指数分布

概率基础——指数分布 介绍 指数分布是一种连续概率分布&#xff0c;描述了独立随机事件之间的时间间隔。它常被用来模拟随机事件的等待时间&#xff0c;例如到达下一位顾客的等待时间、设备故障的间隔时间等。指数分布具有无记忆性的特点&#xff0c;即在给定时间内没有发生…