您的位置:首页 > 其它

leetcode 653. Two Sum IV - Input is a BST

2017-09-03 11:44 645 查看

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