给定一个二叉搜索树 root 和一个目标结果 k,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 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
示例 3:
输入: root = [2,1,3], k = 4
输出: true
示例 4:
输入: root = [2,1,3], k = 1
输出: false
示例 5:
输入: root = [2,1,3], k = 3
输出: true
题解
两种解法
遍历整棵树,map 记录每个节点值,判断是否有 2 个节点相加等于 k 值
/**
* 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) {
const map = {}
let flag = false
const run = node => {
if (map[k - node.val] !== undefined) {
flag = true
} else {
map[node.val] = true
}
if (node.left) run(node.left)
if (node.right) run(node.right)
}
run(root)
return flag
};
第二种中序遍历二叉树,会得到一个升序的数组,利用 2 个指针得到 2 数之和
/**
* 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) {
const list = []
const run = node => {
if (node.left) run(node.left)
list.push(node.val)
if (node.right) run(node.right)
}
run(root)
let i = 0
let j = list.length - 1
while(i < j) {
const num = list[i] + list[j]
if (num === k){
return true
}
if (num > k) {
j--
}
if (num < k) {
i++
}
}
return false
};
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum-iv-input-is-a-bst
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。