1、题目描述
2、解题思路
和从两个数组分别找一个数字组成 target 一样;
遍历第一棵树,把每一个节点分别当成第一个数,然后 target - node.val 为第二个数,如果第二棵树存在 target - node.val ,则返回 true,如果遍历完第一棵树所有节点都没有返回 true,说明找不到,返回 false。
3、解题代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean twoSumBSTs(TreeNode root1, TreeNode root2, int target) {
if (root1 == null) {
return false;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root1);
boolean flag;
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
int N = target - node.val;
flag = find(root2, N);
if (flag) {
return true;
} else {
if (node.left != null) {
queue.add(node.left);
}
if (node.right != null) {
queue.add(node.right);
}
}
}
return false;
}
/**
* 从 node 树中找到元素 target
*
* @param node
* @param target
* @return
*/
private boolean find(TreeNode node, int target) {
if (node == null) {
return false;
}
if (node.val == target) {
return true;
}
if (node.val < target) {
return find(node.right, target);
}
return find(node.left, target);
}
}