代码随想录Day19 LeetCode T669修剪二叉搜索树 LeetCode T108将有序数组转化为二叉搜索树 T538 把二叉搜索树转化为累加树

news2024/11/27 8:44:28

LeetCode T669 修剪二叉搜索树

题目链接:669. 修剪二叉搜索树 - 力扣(LeetCode)

题目思路

这题我们有几个思路需要避坑,首先我们不能这样想,比如遇见比low值还小的节点值,不能直接返回null,而是考虑该节点的右子树有没有符合题目需求的节点值存在,同理删除右节点的时候应该考虑它的左子树有没有比该节点大的节点值存在

1.确定参数和返回值

直接使用原函数即可

2.确定终止条件

        if(root == null)
        {
            return null;
        }
        if(root.val<low)
        {
            return trimBST(root.right,low,high);
        }
        if(root.val>high)
        {
            return trimBST(root.left,low,high);
        }

3.确定单次递归思路

        root.left = trimBST(root.left,low,high);
        root.right = trimBST(root.right,low,high);
        return root;

题目代码

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

    }
}

LeetCode T108将有序数组转化为二叉搜索树

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

题目思路

如果给定一个数组,我们很容易就能想到使用双指针写法来解决问题,但是这道题是一道二叉搜索树的问题,我们就可以使用相似的讨论来解决问题,我们仍然用递归+双指针来解决问题

这题强调了是平衡二叉树,并且是排好升序的二叉树,所以要进行左右子树的分割,注意区间

注意定义数组区间,是左开右闭区间还是闭区间

1.函数的返回值和参数类型

TreeNode sort(int[] nums,int left,int right)

2.函数的终止条件

        if(left>=right)
        {
            return null;
        }

3.函数的递归

        if(right - left == 1)
        {
            return new TreeNode(nums[left]);
        }
        
        int mid = left+(right - left)/2;
        TreeNode node = new TreeNode(nums[mid]);
        node.left = sort(nums,left,mid);
        node.right = sort(nums,mid+1,right);
        return  node;

题目代码

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

    }
}


T538 把二叉搜索树转化为累加树

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

题目思路

这题和上题思路类似,使用双指针,不过这里只用一个pre记录上一个节点的数值即可,避免了去判断指针是否为空的过程,按照右中左过程进行操作即可.

1.函数的参数和返回值

无序返回值,直接操作root即可

void travsal(TreeNode root)

2.函数的终止条件

        if(root == null)
        {
            return;
        }

3.函数的单层递归逻辑

        travsal(root.right);
        root.val += pre;
        pre = root.val;
        travsal(root.left);

题目代码

class Solution {
    int  pre = 0;
    public TreeNode convertBST(TreeNode root) {
       travsal(root);
       return root;

    }
    void travsal(TreeNode root)
    {
        if(root == null)
        {
            return;
        }
        travsal(root.right);
        root.val += pre;
        pre = root.val;
        travsal(root.left);
    }
}

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

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

相关文章

Java学习之TreeSet

Java TreeSet 底层是红黑树实现 将元素插入TreeSet add() - 将指定的元素插入集合 addAll() - 将指定集合的所有元素插入集合 import java.util.TreeSet;class Main {public static void main(String[] args) {TreeSet<Integer> evenNumbers new TreeSet<>();/…

二十三、【五种图层】

文章目录 像素图层智能图层文字图层形状图层调整图层 像素图层 像素图层由空白像素图层组成&#xff0c;上边没有任何颜色&#xff0c;如下图&#xff0c;我们可以使用画笔工具在空白相处图层上进行修改&#xff1a; 智能图层 智能图层可以记录该图层当前的数据在被编辑后可…

ShareX使用说明——优秀的录屏软件

ShareX初识 ShareX 是一个自由及开放源代码的截图录像软件&#xff0c;目前仅支持Windows系统。 项目源代码在GitHub平台上发布&#xff0c; 软件可以在Microsoft商店和Steam上下载。 ShareX is a free and open source program that lets you capture or record any area of y…

VPN的不同种类及现网应用场景

学习目标&#xff1a; 1. 企业为什么要部署VPN&#xff1f; 2. 常见的VPN有哪些种类&#xff1f; 3. VPN如何保障数据传输安全&#xff1f; -- VPN - 虚拟私有网络 - 企业最常用的功能之一 - 增值型业务 -- 需求&#xff1a;大一些公司 分公司 - 管理问题 --…

通过jsoup抓取谷歌商店评分

文章目录 背景实现是否下架预警评分 总的工具类,测试 背景 在谷歌上面发布包,有时候要看看评分,有时候会因为总总原因被下架,希望后台能够对评分进行预警,和下架预警 实现 测试地址: https://play.google.com/store/apps/details?idcom.tencent.mm 通过jsoup解析页面,然后获…

项目管理之六大目标及成功方程式

项目管理的六大目标分别是范围、质量、时间、成本、收益和风险。在项目开始之前&#xff0c;需要明确了解项目的范围&#xff0c;并在项目执行过程中对范围进行严格控制&#xff0c;确保项目不偏离既定的范围。同时&#xff0c;需要明确项目的质量标准和预期成果&#xff0c;然…

采用 guidance 提高大模型输出的可靠性和稳定性

本文首发于博客 LLM 应用开发实践 在复杂的 LLM 应用开发中&#xff0c;特别涉及流程编排和多次 LLM 调用时&#xff0c;每次的 Prompt 设计都取决于前一个步骤的大模型输出。如何避免大语言模型的"胡说八道"&#xff0c;以提高大语言模型输出的可靠性和稳定性&#…

1.13.C++项目:仿muduo库实现并发服务器之TcpServer模块的设计

文章目录 一、LoopThreadPool模块二、实现思想&#xff08;一&#xff09;管理&#xff08;二&#xff09;流程&#xff08;三&#xff09;功能设计 三、代码 一、LoopThreadPool模块 TcpServer模块&#xff1a; 对所有模块的整合&#xff0c;通过 tcpserver 模块实例化的对象&…

C++指针解读(3)-- 指针变量作为函数参数

函数执行是通过系统栈来实现的&#xff0c;系统栈分为若干个栈帧。栈帧就是函数运行的环境&#xff0c;每个函数在被调用时都会在系统栈区形成一个叫栈帧的结构。一次函数调用相关的数据保存在栈帧中&#xff0c;比如函数参数、函数的局部变量、函数执行完后的返回地址等数据。…

【LeetCode刷题(数据结构)】:另一颗树的子树

给你两棵二叉树 root 和 subRoot 检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子…

PCL点云处理之基于强度特征的SIFT关键点提取法 (二百一十五)

PCL点云处理之基于强度特征的SIFT关键点提取法 (二百一十五) 一、算法介绍二、具体实现1.代码2.效果一、算法介绍 继续SIFT关键点的提取介绍,之前已经基于高程和颜色分别提取了关键点,这里是基于强度信息,若遇到文件无法读取强度问题,请参考上一篇博文,下面是具体的实现…

SQL语句-中级

一、Mysql软件使用 1.启动/停止Mysql服务器 任务管理器 cmd命令&#xff1a;以管理员的身份打开cmd命令行 net start mysql80//开启net stop mysql80//停止 2.连接与断开Mysql服务器 注意要在bin目录下执行:-u用户名root&#xff0c;-p密码 mysql -u root -p 可能出现的…

物联网AI MicroPython传感器学习 之 TEA5767 FM收音机模块

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; 一、产品简介 TEA5767 FM收音机模块是工作频率在76MHz&#xff5e;108MHz的自动数字调谐收音机。其特点高灵敏度、高稳定、低噪声&#xff0c;内部集成了中频选频和解调网络。 引脚定义 GND&#xff1a;接…

School‘s Java test

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;题目大解析&#xff08;3&#xff09; 目录 &#x1f449;&#x1f3fb;第四周素数和念整数 &#…

SSM+springboot+vue+java企业公寓员工宿舍后勤管理网站

论文主要是对后勤管理系统进行了介绍&#xff0c;包括研究的现状&#xff0c;还有涉及的开发背景&#xff0c;然后还对系统的设计目标进行了论述&#xff0c;还有系统的需求&#xff0c;以及整个的设计方案&#xff0c;对系统的设计以及实现&#xff0c;也都论述的比较细致&…

24字符串-kmp寻找重复子串

目录 字符串匹配——kmp算法 LeetCode之路——459. 重复的子字符串 分析&#xff1a; 字符串匹配——kmp算法 强烈建议参考Carl的讲解&#xff1a; 视频讲解版&#xff1a;帮你把KMP算法学个通透&#xff01;&#xff08;理论篇&#xff09;(opens new window) 视频讲解版&…

使用Plotly可视化

显示项目受欢迎程度 改进图表 设置颜色&#xff0c;字体

400电话-400电话办理-400号码办理

400电话是一种特殊的电话号码&#xff0c;以"400"开头&#xff0c;通常用于企业客户服务、售后支持等方面。随着互联网的发展&#xff0c;越来越多的企业开始意识到400电话的重要性&#xff0c;并积极办理400号码。 首先&#xff0c;办理400电话可以提升企业形象和信…

【音视频|ALSA】SS528开发板编译Linux内核ALSA驱动、移植alsa-lib、采集与播放usb耳机声音

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

ArcGIS笔记4_水动力模型验证不理想时如何修改局部水深地形

本文目录 前言Step 1 模型验证不理想的情况Step 2 修改确值点并重新插值 前言 本章主要服务于MIKE水动力模型的调整修改工作。水动力模型跑完之后&#xff0c;常常会出现验证结果不理想的情况&#xff0c;比如潮位验证中&#xff0c;实测站点数据与模拟数据相差很大&#xff0…