题目描述
Given a Binary Search Tree and a target number, return true if there exist two elements in the BST such that their sum is equal to the given target.
Example 1:
Input:
5
/ \
3 6
/ \ \
2 4 7
Target = 9
Output: True
Example 2:
Input:
5
/ \
3 6
/ \ \
2 4 7
Target = 28
Output: False
解题思路
给定一个BSF二叉树,判断二叉树中是否有两个节点的值之和等于目标值,如果有则返回true
,否则返回false
这个题有很多种解法,我采取的方法是首先将二叉树中的元素遍历到一个Set集合中,然后判断集合中是否有两个符合题意的节点。遍历的方法使用中序遍历的方法,借助stack;判断集合是否有符合题意的两个节点采用迭代器。
AC代码
class Solution {
public boolean findTarget(TreeNode root, int k) {
Set<Integer> set = new HashSet<>();
Stack<TreeNode> stack = new Stack<>();
while(stack.size() > 0 || root != null) {
if(root != null) {
stack.push(root);
root = root.left;
}else {
root = stack.pop();
set.add(root.val);
root = root.right;
}
}
Iterator<Integer> i = set.iterator();
while(i.hasNext()) {
int target = i.next();
if(set.contains(k - target) && (k - target) != target)
return true;
}
return false;
}
}