day19|669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

news2024/9/29 21:28:11

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] 

问题分析:

当遍历到节点不在范围内,需删除。此时不能return null,而是要继续遍历此节点的子树。例如

if (root.val<low)    return root.right;//错误写法

 当删除0后,需要继续向右子树遍历,不能直接return root.right,因为可能会有比low小的节点1也直接返回给了7的左子树方向

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);//当此时的节点小于low,就把右子树(有可能小于low,所以需要递归判断每个节点)放到上一个节点
            return right;
        }
        if (root.val>high){
            TreeNode left=trimBST(root.left,low,high);//当此时的节点大于high,就把左子树(有可能大于high,所以需要递归判断每个节点)放到上一个节点
            return left;
        }

        root.left=trimBST(root.left,low,high);//接收下一层的节点
        root.right=trimBST(root.right,low,high);//接收下一层的节点
        return root;

    }
}

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] 都是高度平衡二叉搜索树。 

问题分析:

找中间节点,然后分出左区间和右区间,左闭右闭。

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 mid=(left+right)/2;
        TreeNode node=new TreeNode(nums[mid]);
        node.left=traversal(nums,left,mid-1);
        node.right=traversal(nums,mid+1,right);
        return node;
    }
}

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

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

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

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

示例 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]

问题分析:

 二叉搜索树左中右为正序,但是本题从倒序开始相加,也就是从最大的数开始相加,所以遍历顺序为右中左。定义双指针pre和cur,pre为int型,若是TreeNode型会引起空指向,用int会比较方便。

class Solution {
    int pre=0;//定义前一个节点的数值
    public TreeNode convertBST(TreeNode root) {
        traversal(root);
        return root;
    }
    public void traversal(TreeNode cur){//只是改树的节点的值,无返回值
        if (cur==null) return;
        traversal(cur.right);//右

        if (pre!=0){//中
            cur.val=cur.val+pre;
        }
        pre=cur.val;

        traversal(cur.left);//左
    }
}

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

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

相关文章

生物信息【蛋白序列对比blosum】

参考学习&#xff1a;传统蛋白质序列比对算法 - 知乎 (zhihu.com) 一、蛋白序列同源、相似 同源”&#xff08;homology&#xff09;和“相似”&#xff08;similarity&#xff09;&#xff1a; 同源是指有相同的祖先&#xff0c;在这个意义上&#xff0c;无所谓同源的程度&…

MybatisPlus学习笔记(二)

分页查询 分页在网站使用十分之多1.原始的limit进行分页2.pageHelper第三方插件3.MP内置的分页插件如何使用 1.配置拦截器组件 2.使用page对象 删除操作 逻辑删除 物理删除&#xff1a;从数据库中直接移除逻辑删除&#xff1a;在数据库中没有被删除&#xff0c;而是通…

Centos 7升级系统内核版本

步骤一&#xff1a;检查内核版本 [rootmaster ~]# uname -rs Linux 3.10.0-1160.el7.x86_64 步骤二&#xff1a;升级内核 CentOS 允许使用 ELRepo&#xff0c;这是一个第三方仓库&#xff0c;可以将内核升级到最新版本 rpm --import https://www.elrepo.org/RPM-GPG-KEY-elr…

二叉树知识锦囊(二)

作者&#xff1a;爱塔居 专栏&#xff1a;数据结构 作者简介&#xff1a;大三学生&#xff0c;希望和大家一起进步&#xff01; 文章目录 文章目录 一、二叉树的存储 二、二叉树的遍历&#xff08;重点&#xff09; 2.1 前序遍历 2.2 中序遍历 2.3 后序遍历 2.4 层序遍历 2.5 小…

AX7A200教程(2): DDR3仿真平台搭建(二)

本章主要新建ddr3工程&#xff0c;然后将官方的ddr3仿真文件加入到工程里进行仿真&#xff0c;开发环境2020.1。新建ddr3_test工程新建ddr3工程顶层新建的ddr3_top顶层文件&#xff0c;目前还是空白的调用mig控制器&#xff0c;请参考我上一个章节&#xff0c;这里不在具体写调…

搜索引擎——Elasticsearch

文章目录1.ElasticSearch简介2.基本概念3.Elasticsearch概念-倒排索引4.Elasticsearch和Kibana的安装5.Elasticsearch入门操作5.1_cat5.2PUT&POST新增数据5.3PUT&POST修改数据5.4GET查询数据5.5DELETE删除数据5.7bulk批量操作5.6乐观锁字段6.Elasticsearch进阶操作6.1批…

蓝桥杯重点(C/C++)(随时更新)

目录 1 重点 1.1 取消同步&#xff08;节约时间&#xff0c;甚至能多骗点分&#xff0c;最好每个程序都写上&#xff09; 1.2 万能库&#xff08;可能会耽误编译时间&#xff0c;但是省脑子&#xff09; 1.3 蓝桥杯return 0千万别忘了写&#xff01;&#xff01; 1.4 …

【nginx】Windows下的常见问题踩坑

▒ 目录 ▒&#x1f6eb; 导读需求1️⃣ 安装2️⃣ 中文路径3️⃣ alias指定目录错误及原因正确示例&#x1f4d6; 参考资料&#x1f6eb; 导读 需求 最近写了一个前端应用&#xff0c;需要部署后&#xff0c;让别人能访问&#xff0c;想来想去&#xff0c;还是选择了目前最强…

TeeChart Pro VCL FMX 2022.36.220929 Crack

TeeChart Pro VCL FMX图表组件库提供数百种用于数据可视化的 2D 和 3D 图形样式、56 种数学、统计和财务函数供您选择&#xff0c;还有无限数量的轴和 30 个调色板组件。 快速浏览 跨平台的一个来源 针对 Windows、Web 和移动应用程序 Delphi VCL 图表组件 使用 Embarcadero 的…

elasticsearch搜索功能(二)

一、DSL查询文档&#xff08;P100&#xff09; 1. DSL查询分类 Elasticsearch提供了基于JSON的DSL&#xff08;Domain Specific Language&#xff09;来定义查询。常见的查询类型包括&#xff1a; &#xff08;1&#xff09;查询所有&#xff1a;查询出所有数据&#xff0c;一…

《Python程序设计(第3版)》[美] 约翰·策勒(John Zelle) 第 9 章 答案

《Python程序设计&#xff08;第3版&#xff09;》[美] 约翰策勒&#xff08;John Zelle&#xff09; 第 9 章 答案 答案仅供参考&#xff0c;若有错误欢迎指正 判断对错 计算机可以生成真正的随机数。Python 的 random 函数返回伪随机整数。自顶向下的设计也称为逐步求精。…

Redis优惠券秒杀 | 黑马点评

目录 一、全局唯一ID 1、全局ID生成器 二、实现秒杀下单 1、基本的下单功能 2、超卖问题 3、乐观锁解决并发问题 三、实现一人一单 1、思路分析 2、代码初步实现 3、关于锁的范围 4、关于事务失效 5、集群下线程并发问题 一、全局唯一ID 订单如果用自增长会存在…

QT动画实例代码QPropertyAnimation的应用

用QT实现动画&#xff0c;我们必定用到QPropertyAnimation&#xff0c;这里我们介绍几种情形的动画实现。如直线动画&#xff0c;曲线动画&#xff0c;路径动画。 一、基础知识 1、QPropertyAnimation的初始化 我们首先必须在包涵QPropertyAnimation的头文件或者模块&#x…

Android之WorkManager处理后台定时任务

WorkManager和Service并不相同&#xff0c;也没有直接的联系。Service是Android系统四大组件之一&#xff0c;它没有被销毁的情况下是一直保持在后台运行的。而WorkManager只是一个处理定时任务的工具&#xff0c;它可以保证即使在应用退出甚至手机重启的情况下&#xff0c;之前…

动手深度学习-pytorch数据操作

N维数组是机器学习和神经网络的主要数据结构创建数组需要形状&#xff1a;如3*4的矩阵每个元素的类型&#xff1a;例如32位浮点数每个元素的值&#xff1a;例如全是0.或者随机数数据操作首先&#xff0c;导入torch张量表示一个数值组成的数组&#xff0c;这个数组可能有多个维度…

acwing基础课——欧拉函数

由数据范围反推算法复杂度以及算法内容 - AcWing 常用代码模板4——数学知识 - AcWing 基本思想&#xff1a; 这里我们了解一下欧拉函数是什么以及用筛法求欧拉函数&#xff0c;我们先给出欧拉函数的定义&#xff1a; 然后我们了解一下互质的概念&#xff0c;只要两数的公因…

连你女朋友都能看懂的分布式架构原理!

目录 从一个新闻门户网站案例引入推算一下你需要分析多少条数据&#xff1f;黄金搭档&#xff1a;分布式存储分布式计算 这篇文章聊一个话题&#xff1a;什么是分布式计算系统&#xff1f; 一、从一个新闻门户网站案例引入 现在很多同学经常会看到一些名词&#xff0c;比如分…

CSDN官方模板

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

数据结构(栈)

目录 栈的定义 形象比喻 栈的相关术语 栈的抽象数据类型&#xff08;栈Stack的ADT&#xff09; 顺序栈 顺序栈类的声明 顺序栈类成员函数的实现 基本效率分析 顺序栈的应用&#xff08;小测试&#xff09; main.cpp 共享栈 双共享栈 链式栈 链式栈基本操作分析 链…

cf Educational Codeforces Round 134 E. Prefix Function Queries

原题&#xff1a; You are given a string s, consisting of lowercase Latin letters. You are asked q queries about it: given another string t, consisting of lowercase Latin letters, perform the following steps: concatenate s and t; calculate the prefix func…