653. 两数之和 IV - 输入 BST

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

*案例 1:

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

Target = 9

输出: True

案例 2:

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

Target = 28

输出: False

思路:
遍历二叉树,检查k和当前节点值的差是否存在哈希表中,如果存在返回True即可

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def findTarget(self, root, k):
        """
        :type root: TreeNode
        :type k: int
        :rtype: bool
        """

        dic = {}
        return self.helper(root, k, dic)

    def helper(self, root, k, dic):
        if not root:
            return False

        if dic.get(k - root.val, None) == 1:
            return True

        dic[root.val] = 1

        return self.helper(root.left, k, dic) or self.helper(root.right, k, dic)
posted @ 2018-09-25 11:14  yuyin  阅读(88)  评论(0)    收藏  举报