问题描述
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
解题思路
可以将BST中序遍历一次,这样遍历的数据必是按升序排列,在遍历时将读到的数据存入vector中,然后用夹逼法得出结果即可。
(BST相关问题很多时候需要用到中序遍历)
class Solution {
public:
bool findTarget(TreeNode* root, int k) {
if (root == NULL) {
return false;
}
vector<int> v1;
inorder(root, v1);
int total = v1.size();
int h = 0, t = total - 1;
while (1) {
if (h == t) return false;
if (v1[h] + v1[t] == k) {
return true;
}
if (v1[h] + v1[t] < k) {
h++;
continue;
}
if (v1[h] + v1[t] > k) {
t--;
continue;
}
}
}
private:
void inorder(TreeNode *r, vector<int> &vec) {
if (r != NULL) {
inorder(r->left, vec);
vec.push_back(r->val);
inorder(r->right, vec);
}
}
};