给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。
案例 1:
输入: 5 / \ 3 6 / \ \ 2 4 7 Target = 9 输出: True
案例 2:
输入: 5 / \ 3 6 / \ \ 2 4 7 Target = 28 输出: False
法一:递归+哈希表
bool findinSet(TreeNode *node,multiset<int> &s,int k)
{
if (!node) return false;
if (s.count(k - node->val) != 0) return true;
s.insert(node->val);
return findinSet(node->left, s, k) || findinSet(node->right, s, k);
}
bool findTarget(TreeNode* root, int k) {
if (!root) return false;
multiset<int> s;
return findinSet(root, s, k);
}
法二:迭代+哈希表
bool findTarget(TreeNode* root, int k) {
if (!root) return false;
multiset<int> s;
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
auto t = q.front();
q.pop();
if (s.count(k - t->val) != 0) return true;
s.insert(t->val);
if (t->left) q.push(t->left);
if (t->right) q.push(t->right);
}
return false;
}