题目描述:
题解一:双指针
1.二叉搜索树的中序遍历结果为一个升序数组,将输入root中序遍历结果保存在数组result中。
2.对result数组利用双指针进行查找,left=0 right = len(nums)-1,如果找到一组result[left]+result[right]=k,则返回True,否则返回False。
# 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: result = [] def helper(root,result): if root==None: return result if root.left !=None: helper(root.left,result) result.append(root.val) if root.right!=None: helper(root.right,result) helper(root,result) left = 0 right = len(result)-1 while left<right: if result[left]+result[right]==k: return True elif result[left]+result[right]<k: left = left+1 else: right = right-1 return False
题解二:哈希查找
1.构建一个集合set s。
2.如果k-当前节点值在s中,说明存在两个节点和为k,否则将node.val加入s,然后对其左右子节点进行搜索。
class Solution: def findTarget(self, root: TreeNode, k: int) -> bool: s = set() def find(node): if not node: return False if (k - node.val) in s: return True s.add(node.val) return find(node.left) or find(node.right) return find(root)