您的位置:首页 > 其它

算法分析与设计——LeetCode Problem.653 Two Sum IV - Input is a BST

2017-10-19 16:49 501 查看
题目链接

问题描述

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);
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: