1.题目
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.
翻译:给一棵二叉搜索树和一个目标值,判断是否存在两个节点的值相加等于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
2.分析
要找出任意两个节点,他们的和为target。
由于是BST,用中序遍历,得到的数组为递增数组,从数组两端开始判断i =0,j=len-1
a[i]+a[j] == target 返回 true
a[i]+a[j] < target ++i
a[i]+a[j] > target –j
3.代码
class Solution {
public:
bool findTarget(TreeNode* root, int k) {
vector<int> nums;
stack<TreeNode*> nodes;
while (!nodes.empty()||root) {
if (root) {
nodes.push(root);
root = root->left;
}
else {
root = nodes.top();
nodes.pop();
nums.push_back(root->val);
root = root->right;
}
}
int left = 0, right = nums.size() - 1;
while (left < right) {
int sum = nums[left] + nums[right];
if (sum == k)
return true;
else if (sum < k)
++left;
else
--right;
}
return false;
}
};
看到BST就要快速联想到in-order 遍历