【数据结构与算法 | 灵神题单 | 二叉搜索树篇】力扣653

1. 力扣653:两数之和IV - 输入二叉搜索树

1.1 题目:

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

示例 1:

复制代码
输入: root = [5,3,6,2,4,null,7], k = 9
输出: true

示例 2:

复制代码
输入: root = [5,3,6,2,4,null,7], k = 28
输出: false

提示:

  • 二叉树的节点个数的范围是 [1, 104].
  • -104 <= Node.val <= 104
  • 题目数据保证,输入的 root 是一棵 有效 的二叉搜索树
  • -105 <= k <= 105

1.2 思路:

用哈希表存储遍历过的元素,如果在哈希表中找到了自己的另一半,返回true,否则继续查找。

1.3 题解:

java 复制代码
class Solution {
    // 使用哈希表
    HashSet<Integer> hashset = new HashSet<>();
    boolean flag = false;
    public boolean findTarget(TreeNode root, int k) {
        dfs(root, k);
        return flag;
    }
    //dfs的遍历顺序其实不重要
    private void dfs(TreeNode node, int k) {
        if(node == null) return;

        dfs(node.left, k);
        // 如果在哈希表中没找到另一个加起来等于k的元素
        // 就把该节点值加入到哈希表中
        // 继续判断后续节点的值
        
        // 如果找到了,由题意,返回true
        if(!hashset.contains(k - node.val)){
            hashset.add(node.val);
        }else{
            flag = true;
            return;
        }

        dfs(node.right, k);
    }
}
相关推荐
charlie114514191几秒前
从 0 开始的机器学习——NumPy 线性代数部分
开发语言·人工智能·学习·线性代数·算法·机器学习·numpy
执携1 小时前
算法 -- 冒泡排序
数据结构·算法
寻星探路1 小时前
【算法专题】滑动窗口:从“无重复字符”到“字母异位词”的深度剖析
java·开发语言·c++·人工智能·python·算法·ai
程序员小白条1 小时前
面试 Java 基础八股文十问十答第八期
java·开发语言·数据库·spring·面试·职场和发展·毕设
wen__xvn2 小时前
代码随想录算法训练营DAY14第六章 二叉树 part02
数据结构·算法·leetcode
Ka1Yan2 小时前
[数组] - 代码随想录(2-6)
数据结构·算法·leetcode
漫随流水3 小时前
leetcode算法(104.二叉树的最大深度)
数据结构·算法·leetcode·二叉树
机器学习之心HML3 小时前
鲸鱼算法(WOA)优化Kriging模型
算法
DYS_房东的猫3 小时前
《 C++ 零基础入门教程》第6章:模板与 STL 算法 —— 写一次,用万次
开发语言·c++·算法
Tim_103 小时前
【算法专题训练】37、前缀树&二叉树
算法