【数据结构与算法 | 力扣+二叉搜索树篇】力扣938,1008

news2024/9/21 4:30:44

1. 力扣938:二叉搜索树的范围和

1.1 题目:

给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和。

示例 1:

674561a51cd746129af7abf68fa560c0.jpeg

输入:root = [10,5,15,3,7,null,18], low = 7, high = 15
输出:32

示例 2:

26a95c3706bb43b28c274ca4c8238bab.jpeg

输入:root = [10,5,15,3,7,13,18,1,null,6], low = 6, high = 10
输出:23

提示:

  • 树中节点数目在范围 [1, 2 * 104] 内
  • 1 <= Node.val <= 105
  • 1 <= low <= high <= 105
  • 所有 Node.val 互不相同

1.2 思路:

没啥好说的,中序遍历加起来就好了。

1.3 题解:

/**
 * 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 {
    Deque<Integer> deque = new LinkedList<>();
    public int rangeSumBST(TreeNode root, int low, int high) {
        midTraverse(root, low, high);
        int sum = 0;
        while (!deque.isEmpty()){
            sum += deque.pop();
        }
        return sum;
    }
    private void midTraverse(TreeNode node, int low, int high) {
        if (node == null) {
            return;
        }
        midTraverse(node.left, low, high);
        if(node.val >= low && node.val <= high) {
            deque.push(node.val);
        }
        midTraverse(node.right, low, high);
    }
}

2. 力扣1008:前序遍历构造二叉搜索树

2.1 题目:

给定一个整数数组,它表示BST(即 二叉搜索树 )的 序遍历 ,构造树并返回其根。

保证 对于给定的测试用例,总是有可能找到具有给定需求的二叉搜索树。

二叉搜索树 是一棵二叉树,其中每个节点, Node.left 的任何后代的值 严格小于 Node.val , Node.right 的任何后代的值 严格大于 Node.val

二叉树的 前序遍历 首先显示节点的值,然后遍历Node.left,最后遍历Node.right

示例 1:

b68ecb1672804323aa99e4a66a315ae9.png

输入:preorder = [8,5,1,7,10,12]
输出:[8,5,10,1,7,null,12]

示例 2:

输入: preorder = [1,3]
输出: [1,null,3]

提示:

  • 1 <= preorder.length <= 100
  • 1 <= preorder[i] <= 10^8
  • preorder 中的值 互不相同

2.2 思路:

写在题解上了。

2.3 题解:

/**
 * 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 bstFromPreorder(int[] preorder) {
        // 如果是空数组,则直接返回null
        if(preorder.length == 0){
            return null;
        }
        // 构造头节点
        TreeNode root = new TreeNode(preorder[0]);
        TreeNode p = root;
        int i = 1;
        // 栈
        Deque<TreeNode> deque = new LinkedList<>();
        while (i < preorder.length) {
            // 如果数组的值比该节点的值还要小,则可以作为它的左孩子
            if (p.val > preorder[i]){
                // 并用栈记录下来,方便以后回滚
                deque.push(p);
                p.left = new TreeNode(preorder[i]);
                p = p.left;
                // 更新数组的值
                i++;
            } else {
                // 这种情况比较特殊,由题例的图,如果没有key为7的节点
                //没这层if判断,10会成为5的右孩子,但由于8应该大于其左子树的所有节点
                //不满足二叉搜索树的定义,所以必须加上这层判断
                if(!deque.isEmpty() && deque.peek().val < preorder[i]){
                    p = deque.pop();
                } else {
                    p.right = new TreeNode(preorder[i]);
                    p = p.right;
                    i++;
                }
            }
        }
        return root;
    }
}

 

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

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

相关文章

从原理到实践,GraphRAG 如何提升 LLM 的摘要总结能力?

作者介绍&#xff1a;王振亚&#xff0c;蚂蚁大安全技术部技术专家 GraphRAG 是一种基于知识图谱的检索增强生成方法。微软在7月初开源了 GraphRAG 项目&#xff0c;一个月左右的时间内&#xff0c;它已经获得了 13k 的 stars。 相对于通常的 RAG &#xff0c;GraphRAG 在从多…

HTTPS是怎么建⽴连接的(通俗易懂版)

首先了解HTTPS的构造&#xff0c;如下图所示&#xff1a; SSL/TLS 协议基本流程&#xff1a; 客户端向服务器索要并验证服务器的公钥。 双⽅协商⽣产「会话秘钥」。 双⽅采⽤「会话秘钥」进⾏加密通信。 HTTPS建立连接的具体流程如下&#xff1a; ⾸先&#xff0c;客户端向…

电商产品摄影福音!AI绘画 ComfyUI 产品摄影工作流 (自定义产品位置并保留细节),再也不用请摄影师了!

大家好&#xff0c;我是画画的小强 今天&#xff0c;我将介绍一个最新开发的 AI绘画 的产品摄影ComfyUI工作流。只需要提供一张产品图片&#xff0c;然后用提示词描述你想要的画面&#xff0c;就可以生成一张效果非常自然的产品摄影图片。 本次教程所用到的工作流我已经准备好…

一机两用的简单介绍

电子政务外网终端使用过程的风险与挑战 1、终端防护弱&#xff0c;失陷风险大 政务外网终端具备访问互联网能力&#xff0c;造成政务外网终端极易感染僵木蠕病毒&#xff0c;破坏正常办公 政务外网终端易被攻击失陷&#xff0c;成为从互联网攻击政务外网的跳板机 2、VPN漏洞…

资源覆盖机制在安卓中的应用

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 什么是资源覆盖&#xff08;Resource Overlay&#xff09;&#xff1f; 资源覆盖的分类 静态资源覆盖&#xff08;SRO&#…

linux crontab没有按照规则执行排查

配置了cron规则&#xff0c;但是一段时间后任务没有按预期执行&#xff0c;记录一次修复过程 检查crond服务 systemctl status crond规则正常 crontab -l脚本有执行权限 查看日志 第一种&#xff1a;journalctl journalctl -u crond | grep 03:00 -C 3-u 指定crond.serv…

【小塔 | 解锁时尚行业RFID魅力值】

从奢侈品牌到快时尚&#xff0c;越来越多的时尚品牌开始选择RFID技术&#xff0c;RFID标签与货品结合到一起&#xff0c;在客户体验、货品溯源、货品防伪、货品调度、库存盘点等方面做到了极致。 大众熟知的迪卡侬、耐克、阿迪达斯、Zara、优衣库、海澜之家等品牌早在前几年就已…

Python06:分支结构if else

分支结构: 代码中有多条执行路径&#xff0c;但是只有其中一条会被执行 """ eg03 - 分支结构&#xff08;选择结构&#xff09;的例子 代码中有多条执行路径&#xff0c;但是只有其中一条会被执行 admin Admin123!! Author: mimo_yy Date: 2024/5/14 "&qu…

安装TrinityCore wow服务器注册管理软件WoWSimpleRegistration-2:解决图片显示和多区问题

WoWSimpleRegistration官网&#xff1a; GitHub - masterking32/WoWSimpleRegistration: Simple Registration page for TrinityCore/AzerothCore/AshamaneCore/CMangos WoWSimpleRegistration支持TrinityCore和AzerothCore&#xff0c;安装方法见&#xff1a;Nginx配置php起…

【C++】优先级队列(容器适配器)

欢迎来到我的Blog&#xff0c;点击关注哦&#x1f495; 前言 string vector list 这种线性结构是最基础的存储结构&#xff0c;C&#xff08;STL&#xff09;container很好的帮助我们数据存储的问题。 容器适配器 介绍 容器适配器是C标准模板库&#xff08;STL&#xff09;中…

sqllabs游戏

文章目录 总体思路&#xff1a;less-1:less-2:less-3:less-4:less-5:less-6:less-7:less-8:布尔盲注less-9:时间盲注less-21:less-24: 总体思路&#xff1a; 1、第一件事情 逃脱出单引号的控制 闭合单引号 2、单双引号需要成对出现 在python php Java中 3、2个办法 继续把多出…

linux文件命令:更新文件时间戳的工具touch详解

目录 一、概述 二. touch 命令的基本用途 三. touch 命令的语法 3.1、语法 3.2、touch 命令的选项 3.3、时间字符串格式 四. 常用场景 4.1 创建空文件 4.2 同时创建多个文件 4.3 更新文件的时间戳 4.4 只更新访问时间 4.5 只更新修改时间 4.6 设置特定时间戳 4.7 使用另…

入职一年半,这个AI员工晋升为了国内首位AI架构师

你敢想&#xff0c;AI 已经不满足只做程序员了&#xff0c;如今又向架构师这一进阶职业发起挑战。 随着 AI 在研发领域的不断进化&#xff0c;能提供给工程师的助力越来越多&#xff0c;从原先单纯的编码加速器不断延展到架构理解、质量分析、安全扫描、测试生成等更多领域。同…

9.1 迭装饰器的定义与使用:给你的 Python 代码加点“魔法”

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; 工&#x1f497;重&#x1f497;hao&#x1f497;&#xff1a;野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题.…

JDBC在java代码中的使用

声明 对于数据库的增删改查&#xff0c;在使用jdbc的过程中分二类&#xff0c;查&#xff08;DQL&#xff09;语句和增&#xff0c;删&#xff0c;改&#xff08;DML语句&#xff09; 他们的整体都分为以下五部分&#xff0c;只是DQL语句多了数据的处理部分。 在使用之前需要…

首屏优化之:import 动态导入

前言 前面我们聊过可以通过不太的 script 属性比如 defer&#xff0c;async 来实现不同的加载效果&#xff0c;从而实现首屏优化&#xff0c;没看的朋友可以看一下&#xff1a;。 今天我们来聊一下动态导入之 import&#xff0c;当然 import 动态导入也不是一把梭的&#xff…

我们需要提高人工智能产品经理的标准

如何停止指责“模型”并开始构建成功的人工智能产品 产品经理负责决定开发什么&#xff0c;并对决策结果负责。这适用于所有类型的产品&#xff0c;包括由人工智能驱动的产品。然而&#xff0c;在过去十年中&#xff0c;产品经理将人工智能模型视为黑匣子是一种常见做法&#x…

如何在 CI/CD 过程中实施高效的自动化测试和部署

文章目录 摘要引言选择适合的 CI/CD 工具常见 CI/CD 工具选择依据 配置自动化构建和测试流程Jenkins示例 制定测试策略单元测试集成测试系统测试 确保部署环境的稳定性蓝绿部署 未来展望总结参考资料 摘要 在持续集成&#xff08;CI&#xff09;和持续交付&#xff08;CD&…

SemanticKernel/C#:实现接口,接入本地嵌入模型

前言 本文通过Codeblaze.SemanticKernel这个项目&#xff0c;学习如何实现ITextEmbeddingGenerationService接口&#xff0c;接入本地嵌入模型。 项目地址&#xff1a;https://github.com/BLaZeKiLL/Codeblaze.SemanticKernel 实践 SemanticKernel初看以为只支持OpenAI的各…

(24)(24.2) Minim OSD快速安装指南(一)

文章目录 前言 1 概述 2 基本接线图 3 关键冷却条件的可选设置 4 固件可用于MinimOSD 5 MWOSD 前言 MinimOSD “屏幕显示”是一个小型电路板&#xff0c;它从你的自动驾驶仪中提取遥测数据&#xff0c;并将其覆盖在你的第一人称视图监视器上(First Person View)。Minim …