给出两棵二叉搜索树的根节点 root1 和 root2 ,请你从两棵树中各找出一个节点,使得这两个节点的值之和等于目标值 Target。
如果可以找到返回 True,否则返回 False。
来源:力扣(LeetCode) 链接:leetcode.cn/problems/tw… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
- 1.搜索二叉树是左边的比中间的小,右边的比中间的大
- 2.二叉树的中序遍历可以将搜索二叉树按照递增序列排列
- 3.双指针方法不断缩短范围求值
/**
* 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} root1
* @param {TreeNode} root2
* @param {number} target
* @return {boolean}
*/
let orderRootResult = (root, res) => {
if(!root) return
orderRootResult(root.left, res)
res.push(root.val)
orderRootResult(root.right, res)
}
var twoSumBSTs = function(root1, root2, target) {
let res1 = [], res2 = [];
orderRootResult(root1,res1)
orderRootResult(root2,res2)
let l = 0, r = res2.length - 1;
while(l < res1.length && r >= 0) {
if(res1[l] + res2[r] == target) return true
if(res1[l] + res2[r] < target) {
l++
}else {
r--
}
}
return false
};