我们可以使用深度优先搜索的方式遍历整棵树,用哈希表记录遍历过的节点的值。
对于一个值为 xx 的节点,我们检查哈希表中是否存在 k - xk−x 即可。如果存在对应的元素,那么我们就可以在该树上找到两个节点的和为 kk;否则,我们将 xx 放入到哈希表中。
如果遍历完整棵树都不存在对应的元素,那么该树上不存在两个和为 kk 的节点。
class Solution {
Set<Integer> set = new HashSet<Integer>();
public boolean findTarget(TreeNode root, int k) {
if (root == null) {
return false;
}
if (set.contains(k - root.val)) {
return true;
}
set.add(root.val);
return findTarget(root.left, k) || findTarget(root.right, k);
}
}