>653. 两数之和 IV - 输入 BST<
>findTarget<
一、解题思路
1、解法一( Java )
解法思路:深度优先搜索 + 递归调用(二叉树常用)+ 哈希表
使用 递归
深度优先搜索的方式遍历整棵树,用哈希表( Set
集合)记录遍历过的节点的值。如果在遍历某个节点 x
时发现集合中存在 k - x.val
,说明存在两个节点之和等于 k
,则返回 True
;否则我们将 x
放入到哈希表中。若搜索完整棵树都没有则返回 False
。
伪代码如下:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
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);
}
}
运行结果截图如下: