每日力扣-树-两数之和

68 阅读1分钟

给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。

解题思路:二叉搜索树的中序遍历是递增的,然后双指针解决

class Solution {
public:
    vector<int> vec;
    bool findTarget(TreeNode* root, int k) {
        dfs(root,vec);
        int i = 0 , j = vec.size() - 1;
        while(i < j)
        {
            if(vec[i] + vec[j] == k) return true;
            if(vec[i] + vec[j] < k) i++;
            if(vec[i] + vec[j] > k) j--;
        }
        return false;
    }
    void dfs(TreeNode* root, vector<int> &vec)
    {
        if(root == nullptr) return;
        dfs(root->left,vec);
        vec.emplace_back(root->val);
        dfs(root->right,vec);
    }
};