1. 程式人生 > >LeetCode653 | 兩數之和 IV - 輸入 BST

LeetCode653 | 兩數之和 IV - 輸入 BST

LeetCode653 | 兩數之和 IV - 輸入 BST

  • 問題描述
    給定一個二叉搜尋樹和一個目標結果,如果 BST 中存在兩個元素且它們的和等於給定的目標結果,則返回 true。

案例 1:

輸入:
5
/
3 6
/ \
2 4 7

Target = 9

輸出: True

案例 2:

輸入:
5
/
3 6
/ \
2 4 7

Target = 28

輸出: False

  • 解題思路
  • 利用雜湊表,遍歷整顆樹, 如果(目標值- 當前節點值)存在雜湊表中,則存在, 否則繼續遍歷左右子樹。
  • 程式碼
/**
 * 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) {
        if (!root){
            return false;
        }
        unordered_set<int> hx;
        return find(root, k, hx);
    }
    bool find(TreeNode* root, int k, unordered_set<int>& hx) {
        if(!root){
            return false;
        }
        if(hx.count(k-root->val)){
            return true;
        }
        hx.insert(root->val);
        return find(root->left, k, hx)||find(root->right, k, hx);
    }
};