给定一个二叉搜索树 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 = falseconst 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 = 0let j = list.length - 1while(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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
