653. Two Sum IV - Input is a BST

在这里插入图片描述

三种方法:
1.

/**
 * 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) {
        unordered_set<int> hasSeen;
        return dfs(root, k, hasSeen);
    }
private:
    bool dfs(TreeNode* node, int k, unordered_set<int>& hasSeen) {
        if (!node)
            return false;
        if (dfs(node->left, k, hasSeen))
            return true;
        if (hasSeen.find(k - node->val) != hasSeen.end())
            return true;
        hasSeen.insert(node->val);
        return dfs(node->right, k, hasSeen);
    }
};

这里自己写错了,不需要中序的,任意二叉树都可以用这种方法的。

/**
 * 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> nums;
        storeNum(root, nums);
        int i = 0, j = nums.size()-1;
        int sum = 0;
        while (i < j) {
            sum = nums[i] + nums[j];
            if (sum < k)
                ++i;
            else if (sum > k)
                --j;
            else
                return true;
        }
        return false;
    }
private:
    void storeNum(TreeNode* node, vector<int>& nums) {
        if (!node)
            return;
        storeNum(node->left, nums);
        nums.push_back(node->val);
        storeNum(node->right, nums);
    }
};
/**
 * 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) {
        return helper(root, root, k);
    }
private:
    bool helper(TreeNode* node, TreeNode* root, int k) {
        if (!node)
            return false;
        int v = node->val;
        if (k - v != v) {
            if (findHelper(root, k-v))
                return true;
        }
        return helper(node->left, root, k) || helper(node->right, root, k);
    }
    
    bool findHelper(TreeNode* node, int target) {
        if (!node)
            return false;
        if (node->val > target)
            return findHelper(node->left, target);
        else if (node->val < target)
            return findHelper(node->right, target);
        else
            return true;
    }
};
posted @ 2019-10-17 11:03  于老师的父亲王老爷子  阅读(13)  评论(0编辑  收藏  举报