Leetcode 653. 两数之和 IV - 输入 BST
给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。
题目解释
即从平衡二叉树中寻找两个数的和,如果等于target,则返回true,不存在则返回false。
题目解答
- 由BST的性质,BST的中序遍历得到的结果就是一个从小到大已经排好序的结果。
- 因此只要获得中序遍历结果,再从首尾两边开始往中间遍历,去寻找target。
/**
* 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> res;
inorder_walk(root, res);
int left = 0;
int right = res.size() - 1;
while(left < right){
int temp = res[left] + res[right];
if (temp == k)
return true;
else if (temp > k)
right--;
else
left++;
}
return false;
}
void inorder_walk(TreeNode* root, vector<int>& res){
if (!root)
return;
if (root->left)
inorder_walk(root->left, res);
res.push_back(root->val);
if (root->right)
inorder_walk(root->right, res);
}
};