LeetCode 653. Two Sum IV - Input is a BST


タイトル: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
アイデア:unorderedを利用するsetの要素は一意性があり、無秩序で効率が高い.そして再帰的な思想を利用して、具体的な構想は注釈を見ます
コード:
/**
 * 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 dfs(unordered_set<int>& tmp,TreeNode* root,int k){
        if(root==NULL){//     root NULL,  false
            return false;
        }
        if(tmp.count(k-root->val)){//  k-       unordered_set ,  true
            return true;
        }
        tmp.insert(root->val);//             unordered_set 
        return dfs(tmp,root->left,k)||dfs(tmp,root->right,k);//                  
    }
    bool findTarget(TreeNode* root, int k) {
       unordered_set<int> tmp;//  unordered_set  
       return dfs(tmp,root,k);
    }
};

結果:41 ms