想法:
我们可以利用深度优先算法,遍历每一个节点。
在遍历的过程中,我们可以把node的value储存到一个set里面,因为set相比list的效率更高,因为没有重复出现的数字,每一个element都是独特的。
在遍历的过程中,我们每经过一个node,都要计算目标和与node value的差值,并检查这个差值是否在我们的set中,如果是,返回True。
最后,我们用recursive的方法遍历左子树和右子树。
代码:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def findTarget(self, root: Optional[TreeNode], k: int) -> bool:
s = set()
def dfs(node):
if not node: return False
tmp = k-node.val
if tmp in s:
return True
else:
s.add(node.val)
return dfs(node.left) or dfs(node.right)
return dfs(root)