Skip to content

Latest commit

 

History

History

1214

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

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:

Solution 1.

// 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;
    }
};