前言
记录下leetcode每日一题
题目描述
给定一个二叉搜索树 root 和一个目标结果 k,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。
示例1
5
/ \
3 6
/ \ \
2 4 7
输入: root = [5,3,6,2,4,null,7], k = 9
输出: true
示例2
5
/ \
3 6
/ \ \
2 4 7
输入: root = [5,3,6,2,4,null,7], k = 28
输出: false
提示
- 二叉树的节点个数的范围是
[1, 104]. -104 <= Node.val <= 104root为二叉搜索树-105 <= k <= 105
思路
- 首先可以存储一个hash表存储遍历过的数
- 对其进行深度优先查找,对每一个查找的数据和hash表中比对
- 如果k和当前值相减后的值,存在hash表中,那么就返回true
- 如果没有存在,就将当前的值放入hash表中,进入下一个遍历
- 反复查找,直到没有查找到,返回false
代码
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @param {number} k
* @return {boolean}
*/
var findTarget = function (root, k) {
let node = root;
const hash = new Set()
let exist = false;
if (node.val == null) {
return false
}
hash.add(node.val)
searchNode(node.left, hash, k)
searchNode(node.right, hash, k)
function searchNode(node, hash, k) {
if (node == null) {
return false
}
const val = node.val;
if (hash.has(k - val)) {
exist = true
return
}
hash.add(val)
searchNode(node.left, hash, k)
searchNode(node.right, hash, k)
return false
}
return exist
};
最后
每天进步一点点