链接
题目
给定一个二叉搜索树
root
和一个目标结果k
,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回true
。
示例
示例 1:
输入: root = [5,3,6,2,4,null,7], k = 9
输出: true
示例 2:
输入: root = [5,3,6,2,4,null,7], k = 28
输出: false
说明
- 二叉树的节点个数的范围是
[1, 10e4]
.-10e4 <= Node.val <= 10e4
root
为二叉搜索树-10e5 <= k <= 10e5
思路
在遍历的过程中,用一个哈希集保存当前遍历到的数字n,如果k-n已经在哈希集中,则已找到,如果遍历完还没出现,则false。
C++ Code
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
unordered_set<int> hashset;
int flag=0;
void traversal(TreeNode* root, int k){
if(root==nullptr) return;
if(hashset.count(k-root->val)) flag=1;
else hashset.insert(root->val);
traversal(root->left,k);
traversal(root->right,k);
}
bool findTarget(TreeNode* root, int k) {
//遍历+hashset
traversal(root,k);
return flag==1? true:false;
}
};