653. Two Sum IV - Input is a BST
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
1、因为是二叉搜索树,所以已经排好序了。那么可以用中序遍历来将二叉树读到数组中,再利用已经排好序的数组进行查找即可。
/**
* 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==nullptr)
return false;
vector<int>TreeVal;
inorder(root,TreeVal);
int l=0,r=TreeVal.size()-1;
while(l<r)
{
int sum=TreeVal[l]+TreeVal[r];
if(sum==k)
return true;
else if(sum<k)
{
l++;
}
else
r--;
}
return false;
}
void inorder(TreeNode*root,vector<int>&TreeVal)
{
if(root==nullptr)
return;
inorder(root->left,TreeVal);
TreeVal.push_back(root->val);
inorder(root->right,TreeVal);
}
};
2、查找的东西都可以用哈希表来表示。
class Solution {
public:
bool myfind(TreeNode*root,int k,set<int>&myset)
{
if(root==nullptr)
return false;
if(myset.find(k-root->val)!=myset.end())
return true;
myset.insert(root->val);
return myfind(root->left,k,myset)||myfind(root->right,k,myset);
}
bool findTarget(TreeNode* root, int k) {
set<int> myset;
return myfind(root,k,myset);
}
};