Given the roots of two binary search trees, root1
and root2
, return true
if and only if there is a node in the first tree and a node in the second tree whose values sum up to a given integer target
.
Example 1:
Input: root1 = [2,1,4], root2 = [1,0,3], target = 5 Output: true Explanation: 2 and 3 sum up to 5.
Example 2:
Input: root1 = [0,-10,10], root2 = [5,1,7,0,2], target = 18 Output: false
Constraints:
- The number of nodes in each tree is in the range
[1, 5000]
. -109 <= Node.val, target <= 109
Companies:
Amazon
Related Topics:
Two Pointers, Binary Search, Stack, Tree, Depth-First Search, Binary Search Tree, Binary Tree
Similar Questions:
// OJ: https://leetcode.com/problems/two-sum-bsts/
// Author: github.com/lzl124631x
// Time: O(A + B)
// Space: O(HA + HB)
class Solution {
void pushNodes(stack<TreeNode*> &s, TreeNode *n, bool right = false) {
for (; n; n = right ? n->right : n->left) s.push(n);
}
public:
bool twoSumBSTs(TreeNode* a, TreeNode* b, int target) {
stack<TreeNode*> sa, sb;
pushNodes(sa, a);
pushNodes(sb, b, true);
while (sa.size() && sb.size()) {
int sum = sa.top()->val + sb.top()->val;
if (sum == target) return true;
if (sum < target) {
auto n = sa.top();
sa.pop();
pushNodes(sa, n->right);
} else {
auto n = sb.top();
sb.pop();
pushNodes(sb, n->left, true);
}
}
return false;
}
};