题目
给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。
思路
通过二叉树的中序遍历使其生成一个数组,可通过双指针和哈希表的方法进行查找。
双指针
class Solution:
def inorder(self,root):
if root is None:
return
self.inorder(root.left)
self.tmp.append(root.val)
self.inorder(root.right)
def findTarget(self, root: TreeNode, k: int) -> bool:
self.tmp = []
self.inorder(root)
l = 0
r = len(self.tmp)-1
while l<r:
rst = self.tmp[l]+self.tmp[r]
if rst>k:
r-=1
elif rst<k:
l+=1
else:
return True
return False
通过二叉树的中序遍历生成一个数组
在空数组self.temp内填入遍历生成的数组
通过双指针
数组左边从(l=0)开始,数组右边从(r=数组长度-1)开始
rst是数组左边值与右边值相加
如果rst大于目标值
右边向左移动一位
如果rst小于目标值
左边向右移动一位
哈希表
class Solution:
def findTarget(self, root: TreeNode, k: int) -> bool:
def inorder(root):
if not root:
return []
return inorder(root.left)+[root.val]+inorder(root.right)
target = inorder(root)
n = len(target)
_dict = {}
for i, m in enumerate(target):
_dict[m] = i
if _dict.get(k - m) is not None:
return True
return False
通过二叉树中序遍历生成数组存储在target中
n是target数组的长度
创建一个空字典
将target数组的下标存入i中,值存入m中
将其值于下表对应放入字典中
如果目标值减去数组中的一个值所得的值在数组中
返回为真,否则返回为假