给定一个二叉搜索树的 根节点 root
和一个整数 k
, 请判断该二叉搜索树中是否存在两个节点它们的值之和等于 k
。假设二叉搜索树中节点的值均唯一。
示例 1:
输入: root = [8,6,10,5,7,9,11], k = 12 输出: true 解释: 节点 5 和节点 7 之和等于 12
示例 2:
输入: root = [8,6,10,5,7,9,11], k = 22 输出: false 解释: 不存在两个节点值之和为 22 的节点
提示:
[1, 104]
.-104 <= Node.val <= 104
root
为二叉搜索树-105 <= k <= 105
注意:本题与主站 653 题相同: 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
LCR 056. 两数之和 IV - 输入二叉搜索树 - 力扣(LeetCode)
思路:广搜+使用set来记录是否存在k-node.val
代码:
- class Solution {
- public boolean findTarget(TreeNode root, int k) {
- if(root==null) return false;
- Set
set=new HashSet<>(); - Queue
queue=new ArrayDeque<>(); - queue.offer(root);
- while(!queue.isEmpty()) {
- TreeNode node=queue.poll();
- if(set.contains(k-node.val)) return true;
- set.add(node.val);
- if(node.left!=null) queue.offer(node.left);
- if(node.right!=null) queue.offer(node.right);
- }
- return false;
- }
- }