解法:哈希表
前序遍历二叉树的同时,往哈希表中插入每个节点的值,若发现哈希表中存在
k - cur->val
,则表示二叉树中存在两个数,它们的和为k
,思路与两数之和相同,只不过加入了二叉树的遍历。时间复杂度:$O(N)$,空间复杂度$O(N)$;
该方法没有利用好二叉搜索树这个性质。
class Solution {
public:
bool findTarget(TreeNode* root, int k) {
if (root == nullptr) return false;
unordered_set<int> hash;
queue<TreeNode*> q;
q.push(root);
while (!q.empty())
{
TreeNode* tmp = q.front();
q.pop();
if (hash.find(k - tmp->val) != hash.end()) return true;
else hash.insert(tmp->val);
if (tmp->left) q.push(tmp->left);
if (tmp->right) q.push(tmp->right);
}
return false;
}
};