LeetCode笔记

LeetCode笔记:653. Two Sum IV - Inp

2018-02-05  本文已影响84人  Cloudox_

问题(Easy):

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:



Target = 9
Output: True

Example 2:
Input:



Target = 28
Output: False

大意:

给出一个二叉搜索树和一个目标值,返回树中是否存在两个元素相加等于目标值。

例1:
输入:



目标值 = 9
输出:True

例2:
输入:



目标值= 28
输出:False

思路:

目标是在树中找到两个数相加正好等于目标值,我们用广度优先遍历的方法遍历树,同时构建一个set集合,对于每一个元素,我们将其节点值与目标值的差值放入set中,这样,当遇到其他元素时,我们都在set中查找有没有其节点的值,如果有,说明另一个节点值曾经需要和它一起相加得出目标值,那就是True了,如果遍历完了还没这种情况,那就说明是False。

这种方法对所有树都适用,时间复杂度和空间复杂度都是O(n)。

代码(C++):

/**
 * 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 == NULL) return false;
        
        set<int> partnerSet;
        queue<TreeNode*> q;
        q.push(root);
        int levelNum = 1;
        while (!q.empty()) {
            int num = levelNum;
            levelNum = 0;
            for (int i = 0; i < num; i++) {
                TreeNode* temp = q.front();
                if (partnerSet.count(temp->val)) return true;
                else {
                    partnerSet.insert(k - temp->val);
                    if (temp->left) {
                        q.push(temp->left);
                        levelNum++;
                    }
                    if (temp->right) {
                        q.push(temp->right);
                        levelNum++;
                    }
                }
                q.pop();
            }
        }
        return false;
    }
};

合集:https://github.com/Cloudox/LeetCode-Record


查看作者首页

上一篇下一篇

猜你喜欢

热点阅读