题目描述
给你两棵二叉搜索树,请你从两棵树中各找出一个节点,使得这两个节点的值之和等于目标值 Target。如果可以找到,就返回 True。
示例 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
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum-bsts
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
class Solution {
public:
vector<int> vect1,vect2;
void InOrder(TreeNode* root,int flag){
if(root == NULL) return;
InOrder(root->left,flag);
if(flag == 1) vect1.push_back(root->val);
else vect2.push_back(root->val);
InOrder(root->right,flag);
}
bool twoSumBSTs(TreeNode* root1, TreeNode* root2, int target) {
InOrder(root1,1);
InOrder(root2,2);
for(int t : vect1){
int tmp = target - t;
int left = 0,right = vect2.size()-1;
while(left <= right){
int mid = left + (right - left) / 2;
if(vect2[mid] == tmp) return true;
else if(vect2[mid] > tmp) right = mid-1;
else left = mid+1;
}
}
return false;
}
};