(刷题笔记)Leetcode 653.两数之和 IV - 输入 BST

Ubuntu20.04配置PX4环境启动或编译jmavsim 出现的错误及解决办法 错误1:ant命令未找到 阅读详情

题目

给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。

案例 1:

输入:

    5
   / \
  3   6
 / \   \
2   4   7

Target = 9

输出: True

案例 2:

输入:

    5
   / \
  3   6
 / \   \
2   4   7

Target = 28

输出: False

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum-iv-input-is-a-bst

解题思路

这是一道稍微综合性的题目,考察了二叉树搜索树的性质和二分查找算法。
首先是对二叉搜索树进行中序遍历,用一个vector记录中序遍历结果。
因为二叉搜索树的中序遍历结果是有序的,所以对于K的搜索可以用二分查找法
维护一个left和right的指针(广义的,实际指数组下标),left指向vector的头,right指向vector的尾
比较vec[left]+vec[right]与K的大小,大于K说明vec[right]大了,right–;小于K说明vec[left]小了,left++;
等于直接返回true;跳出条件是left>right的时候,说明没有找到。

话说我一开始写的时候没有想到二分,用双重循环暴力搜索,提交的用时和二分竟然是一样的,不知道是不是测试数据的问题。

代码(C++)

迭代

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    bool findTarget(TreeNode* root, int k) {

        stack<TreeNode*> st;
        vector<int> vec;
        TreeNode* temp=root;

        while(!st.empty()||temp){

            while(temp){
                st.push(temp);
                temp=temp->left;
            }
            temp=st.top();
            st.pop();
            vec.push_back(temp->val);
            temp=temp->right;
        }

        int left=0;
        int right=vec.size()-1;
        while(left<right){

            if(vec[left]+vec[right]<k) left++;
            else if(vec[left]+vec[right]>k) right--;
            else return true;  
        }

        return false;

    }
};

递归

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    void dfs(TreeNode* root,vector<int> &vec){
        if(root==NULL) return;
        dfs(root->left,vec);
        vec.push_back(root->val);
        dfs(root->right,vec);
    }

    bool findTarget(TreeNode* root, int k) {

        vector<int> vec;
        dfs(root,vec);

        int left=0;
        int right=vec.size()-1;

        while(left<right){
            if(k>vec[left]+vec[right]) left++;
            else if(k<vec[left]+vec[right]) right--;
            else return true;
        }
       
        return false;
    
    }
};
亿佰特E77模块(STM32WLE5CCU6)LoRa通信实战指南:从配置到应用开发 本文详细介绍了亿佰特E77模块(STM32WLE5CCU6)的LoRa通信实战指南,从硬件配置到应用开发。基于ARM Cortex-M4内核的E77模块集成了LoRa射频前端,具备超低功耗和硬件级抗干扰特性,适用于智能农业、工业现场等场景。文章提供了开发环境搭建、LoRa参数配置、实战通信及性能优化等实用技巧,帮助开发者快速掌握LoRa通信技术。 阅读详情

相关推荐

电机控制中ADC采样时序的优化策略与实践

本文深入探讨了电机控制中ADC采样时序的优化策略与实践,重点分析了BLDC和FOC控制方案中的核心挑战与解决方案。通过硬件布局优化、软件滤波技术及动态时序补偿等方法,有效提升电流采样精度和系统稳定性,为电机控制系统的性能优化提供实用指导。

weixin_42519985的博客 386

653. 两数之和 IV - 输入 BST

653. 两数之和 IV - 输入 BST 题目描述 给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。 案例 1: 案例 2: 方法1 中序遍历+二分查找 中序遍历是递增序列,在序列中二分查找,这种两个下标left和right,分别指向序列的头和尾,如果list[left] + list[right] < target则lef...

jiangdongxiaobawang的博客 209

GoDaddy域名解析 到 阿里云域名DNS

一:登录GODaddy,点击“个人中心”,然后点击“管理域名” 二:域名解析 第一种:直接解析到对应的服务器 添加一个,类型默认A,主机填写二级域名前缀(image.主域名),指向填写目标服务器ip即可(注意目标服务器80端口是否开放) 第二种:将主域名dns转到阿里云域名下 三:若要修给为阿里云解析服务器,要做以下修改,点击“更改” 点击更改后出现如下页面,此时需要到阿里云官网云解析DNS下添加域名解析 四:阿里云添加域名解析...

xiaolinzi176的博客 6705

给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true

/** * 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) {...

喝泉水的泉 288

Xilinx Blockset Counter计数器模块使用及参数配置

本文详细介绍了Simulink中Xilinx Blockset库Counter模块的使用以及参数说明。

白码王子小张的博客 1096

DDS器件原理与应用(AD9833 AD9834)

是DDS的核心组成部分,用于实现相位的累加,并输出相应的幅值。相位累加器由M位宽加法器和M位宽寄存器组成,通过时钟控制,将上一次累加结果反馈到加法器输入端实现累加功能,从而使每个时钟周期内的相位递增数为,并取相位累加结果作为地址输出给ROM查找表部分。DDS的相位信息被存放在累加寄存器中,虽然幅值和相位不是线性关系,但寄存器累加值和相位可以是线性关系,很容易用寄存器的累加值表达相位信息。

m0_49968063的博客 6444

数据结构每日一题32

给定一个二叉搜索树 root 和一个目标结果 k,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。 方法一:先层序遍历一遍二叉树,将每个节点的值放入哈希表中,每遍历一个节点,判断当前节点的值是否与哈希表中的某个值相加等于目标值。 classSolution{ public: boolfindTarget(TreeNode*root,intk){ if(root==nullptr){ returnfal...

a22025340的博客 983

手把手教你校准垂起固定翼(VTOL)遥控器与电调:从零到飞的完整流程

本文详细介绍了垂起固定翼(VTOL)遥控器与电调的校准流程,从基础认知到飞行前检查,涵盖遥控器通道配置、电调校准、舵机方向调整等关键步骤。通过图文并茂的指导,帮助无人机爱好者安全完成VTOL调试,确保首飞成功。特别强调多旋翼模式、过渡模式和固定翼模式的设置要点,适合新手和进阶用户参考。

jenkins8butler的博客 357

leetcode-给定二叉搜索树和一个目标值,判断树中是否有两元素加和等于目标值 思路与代码

问题描述 问题链接:https://leetcode.com/problems/two-sum-iv-input-is-a-bst/ 给定一个二叉搜索树和一个目标值,如果在树中存在两个元素加和等于目标值则返回true,否则放那会false。 Given a Binary Search Tree and a target number, return true if there exist two...

数据之美的博客 1288

1. 迈进 SAP UI5 开发世界的第一步 - Hello World

SAP UI5 是一个用于开发企业级 Web 应用的前端框架,基于 HTML 和 JavaScript. 作为教程的第一步,我们需要了解最基础的 HTML 知识。 请大家在电脑上任意新建一个文件夹,将其命名,比如我取的名称为 Walkthrough. 进入 Walkthrough 文件夹,再新建一个文件夹名叫 01,代表本教程的第一个步骤。 进入 01 文件夹,新建一个 webapp 文件夹。这个名称是 web 应用约定俗成所使用的,大家都倾向于用这个名称,当然你要是想用其他名称也没有问题。......

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 9005

利用恒源云云端GPU高效训练YOLOv11模型全流程:从环境搭建到模型部署,让你摆脱硬件束缚

记住,云端GPU的核心优势是“弹性算力+一键环境”,只要把握好这一工具特性,再结合YOLOv11的高性能模型架构,你也能在计算机视觉领域快速落地项目。接下来,我们从工具准备到模型部署,一步步带你实现高效训练,真正帮你解决资源与效率的核心痛点。凭借其在目标检测、实例分割任务上的卓越性能,成为众多开发者的首选。据统计,使用云端GPU训练YOLOv11,在处理百万级数据集时,训练效率较本地普通GPU提升。在安防监控中,YOLOv11可实时检测人员、车辆异常行为,某园区采用该方案后,异常事件识别准确率达。

LXY_LOVE36的博客 213

BST二叉搜索树具备什么特性呢

每次刷leetcode都会复习到很多以前上学的知识, 今天遇到的是一个关于BST即二叉搜索树的题目。 给定一个二叉搜索树 root 和一个目标结果 k,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。 为了能顺利解答这个题目,我特意翻了一下以前的课本。 对于二叉搜索数,定义是这样讲的: 二叉树搜索可以递归性地定义为具有以下性质的二叉树: 左子树上的所有节点的值均小于该节点的值 右子树上的所有节点的值均大于该节点的值 左右子树均为二叉搜索树 ...

YOU_hunter的博客 353

SAP中关于预测需求的重要载体:计划独立需求

预测,就是为了调节客户需求的波动、不平衡,使企业的生产计划、物料计划尽量平稳、有序的必备工具。计划独立需求,Planned Independent Requirement(PIR)是SAP系统中最常见的预测需求。

saplakes的博客 1879

LeetCode|Day5|653. 两数之和 IV – 输入 BST(变体)|Python刷题笔记

文章摘要 题目: LeetCode 653. 两数之和 IV – 输入 BST(变体) 难度: 简单 给定二叉搜索树(BST)和目标值 k,判断是否存在两个节点值之和等于 k。 解法: 使用中序遍历获取有序节点值,遍历时用哈希集合检查是否存在补数(k - val)。时间复杂度 O(n),空间复杂度 O(n)。 示例代码: def findTarget(root, k): vals = inorder_traversal(root) # 中序遍历 seen = set() for val in vals: i

weixin_51408942的博客 383

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

LeetCode刷题笔记 653. 两数之和 IV - 输入 BST

题目描述 给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。 Sample Code class Solution { TreeNode t; int Max,Min; public boolean findTarget(TreeNode root, int k) { if(root == nul...

XIIV13的博客 194

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

LeetCode刷题笔记653. 两数之和 IV - 输入 BST

题目描述 给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。 案例 1: 输入: 输出: True 案例 2: 输入: 输出: False 链接:https://leetcode-cn.com/problems/two-sum-iv-input-is-a-bst 解题思路 根据题目特点是一个二叉排序树,他的中序遍历是按照升序排列的,因此可以先中序遍历二叉树获得的结果存放在一个list中,然后利用两个指针作为list头部和尾部索引检索是否有合适的

这不是一个标题 299

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

LeetCode刷题笔记:653.两数之和 IV-输入BST

LeetCode刷题笔记

hutianle的博客 531

两数之和 IV - 输入 BST

两数之和 IV - 输入 BST(力扣:653) 给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。

卜大爷的博客 2万+

Java实现 LeetCode 653 两数之和 IV - 输入 BST(递归,找差值)

653. 两数之和 IV - 输入 BST 给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。 案例 1: 输入: 5 / \ 3 6 / \ \ 2 4 7 Target = 9 输出: True 案例 2: 输入: 5 / \ 3 6 / \ \ 2 4 7 ...

南 墙 1万+

LeetCode 653. 两数之和 IV - 输入 BST

653. 两数之和 IV - 输入 BST题解 题目来源:653. 两数之和 IV - 输入 BST 2022.03.21 每日一题

小明不要写Bug的博客 709

leetcode 653.两数之和-iv-输入-bst(two sum iv input is a bst)C语言

leetcode 653.两数之和-iv-输入-bst(two sum iv input is a bst)C语言1.description2.solution 1.description https://leetcode-cn.com/problems/two-sum-iv-input-is-a-bst/description/ 给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。 案例 1: 输入: Target = 9 输出: True 案例

hsk6543210的博客 248

leetcode 算法题653 (简单164) 两数之和 IV - 输入 BST

leetcode 算法题653 (简单164) 两数之和 IV - 输入 BST 题目介绍 给定一个二叉搜索树和一个目标结果, 如果 BST 中存在两个元素且它们的和等于给定的目标结果, 则返回 true。 示例 输入: 5 / \ 3 6 / \ \ 2 4 7 Target = 9 输出: True 输入: 5 / \ 3 6 / ...

FYuu95100的博客 250

LeetCode 653. 两数之和 IV - 输入 BST(Two Sum IV - Input is a BST)

653. 两数之和 IV - 输入 BST 653. Two Sum IV - Input is a BST 题目描述 给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。 LeetCode653. Two Sum IV - Input is a BST简单 案例 1: 输入: 5 / \ 3 6 / \ \ 2...

weixin_30430169的博客 116

LeetCode 653. Two Sum IV - Input is a BST 题解

本题是二叉搜索树的经典问题,主要考察对二叉搜索树性质的理解和应用。通过使用中序遍历 + 双指针或哈希表,我们可以高效地在二叉搜索树中查找两个节点值之和等于目标值。中序遍历 + 双指针的核心思想是:利用二叉搜索树的中序遍历结果是递增序列的性质,使用双指针在递增序列中查找两个数之和等于目标值。哈希表的核心思想是:遍历二叉搜索树,使用哈希表存储已访问的节点值,检查是否在哈希表中。在实际应用中,哈希表方法通常更受欢迎,因为它只需要遍历二叉树一次,而不需要存储整个遍历结果。

cannonjinx的博客 4372

Leetcode 653. 两数之和 IV - 输入 BST C++

Leetcode 653. 两数之和 IV - 输入 BST 题目 给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。 测试样例 案例 1: 输入: 5 / \ 3 6 / \ \ 2 4 7 Target = 9 输出: True 案例 2: 输入: 5 / \ 3 6 / \ \ 2 4 7 Target = 28 输出: False 题解 哈希表记录出现的

weixin_43750513的博客 137

力扣解法汇总653-两数之和 IV - 输入 BST

目录链接: 力扣编程题-解法汇总_分享+记录-优快云博客 GitHub同步题项目: https://github.com/September26/java-algorithms 原题链接:力扣 描述: 给定一个二叉搜索树 root 和一个目标结果 k,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。 示例 1: 输入: root = [5,3,6,2,4,null,7], k = 9 输出: true 示例 2: 输入: root = [

分享+记录 1749
上一篇: (刷题笔记) Leetcode 面试题 04.04. 检查平衡性
下一篇: (刷题笔记)Leetcode 563.二叉树的坡度
Lucky&Happy
博客等级 码龄10年 1粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值