版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jmu201521121021/article/details/84621666
LeetCode653 | 两数之和 IV - 输入 BST
- 问题描述
给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。
案例 1:
输入:
5
/
3 6
/ \
2 4 7
Target = 9
输出: True
案例 2:
输入:
5
/
3 6
/ \
2 4 7
Target = 28
输出: False
- 解题思路
- 利用哈希表,遍历整颗树, 如果(目标值- 当前节点值)存在哈希表中,则存在, 否则继续遍历左右子树。
- 代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool findTarget(TreeNode* root, int k) {
if (!root){
return false;
}
unordered_set<int> hx;
return find(root, k, hx);
}
bool find(TreeNode* root, int k, unordered_set<int>& hx) {
if(!root){
return false;
}
if(hx.count(k-root->val)){
return true;
}
hx.insert(root->val);
return find(root->left, k, hx)||find(root->right, k, hx);
}
};