给出两棵二叉搜索树,请你从两棵树中各找出一个节点,使得这两个节点的值之和等于目标值 Target
。
如果可以找到返回 True
,否则返回 False
。
示例 1:
输入:root1 = [2,1,4], root2 = [1,0,3], target = 5
输出:true
解释:2 加 3 和为 5 。
示例 2:
输入:root1 = [0,-10,10], root2 = [5,1,7,0,2], target = 18
输出:false
提示:
- 每棵树上最多有
5000
个节点。 -10^9 <= target, node.val <= 10^9
C++
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
void dfs(TreeNode* root, map<int,int>& tmp)
{
if(root)
{
tmp[root->val]=1;
dfs(root->left,tmp);
dfs(root->right,tmp);
}
}
bool twoSumBSTs(TreeNode* root1, TreeNode* root2, int target)
{
map<int,int> tmp1;
map<int,int> tmp2;
dfs(root1,tmp1);
dfs(root2,tmp2);
for(auto it:tmp1)
{
int val=target-it.first;
if(tmp2[val])
{
return true;
}
}
return false;
}
};