题目描述:
给定一个二叉搜索树和一个目标结果,如果 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) {
vector<int>cnt;
Inorder(root, cnt);
for(int i=0, j=cnt.size()-1; i <j; ) //双指针法,
{
int a = cnt[i]+cnt[j];
if(a == k)
return true;
else if(a < k)
i++;
else
j--;
}
return false;
}
void Inorder(TreeNode* root, vector<int>& cnt) //中序遍历
{
if(root)
{
Inorder(root->left, cnt);
cnt.push_back(root->val);
Inorder(root->right, cnt);
}
}
};