方法1:
# 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
"""
list = []
def dfs(root):
if root:
dfs(root.left)
list.append(root.val)
dfs(root.right)
return
dfs(root)
print list
for i in range(len(list)):
for j in range(i+1,len(list)):
if list[i] + list[j] == k:
return True
return False
Sol = Solution()
t1 = TreeNode(1)
t1.left = TreeNode(2)
t1.right = TreeNode(3)
print Sol.findTarget(t1,2)
方法2:
def findTarget(self, root, k):
if not root: return False
bfs, s = [root], set()
for i in bfs:
if k - i.val in s: return True
s.add(i.val)
if i.left: bfs.append(i.left)
if i.right: bfs.append(i.right)
return False
0,第一个是自己写的方法,效率很差,第二种是主流的办法
1,第一种方法,就是利用先序遍历得到一个从小到大排列的一个列表,然后进行逐一相加比较,得到最后结果。因为题目给出的是BST,也就是二叉搜索树,因此先序搜索的结果就是一个从小到大排列的列表。
2,在方法2中,首先定义了一个元素为树节点的列表以及一个集合。利用所求元素与当前元素的差值是否在集合中来判断,集合中是否存在元素与当前元素的和等于目标元素,也就是题目的需求。