剑指 Offer II 056. 二叉搜索树中两个节点之和
题目:
给定一个二叉搜索树的 根节点 root 和一个整数 k , 请判断该二叉搜索树中是否存在两个节点它们的值之和等于 k 。假设二叉搜索树中节点的值均唯一。
示例 1:
输入: root = [8,6,10,5,7,9,11], k = 12
输出: true
解释: 节点 5 和节点 7 之和等于 12
示例 2:
输入: root = [8,6,10,5,7,9,11], k = 22
输出: false
解释: 不存在两个节点值之和为 22 的节点
提示:
二叉树的节点个数的范围是[1, 104].
-104 <= Node.val <= 104
root 为二叉搜索树
-105 <= k <= 105
解题:中序遍历+双指针
二叉搜索树中序遍历得到的数组是升序的
双指针对升序数组进行操作,时间复杂度为O(n)
class Solution:
def findTarget(self, root: TreeNode, k: int) -> bool:
nums = []
def preOrder(node):
if not node:
return False
preOrder(node.left)
nums.append(node.val)
preOrder(node.right)
preOrder(root)
left = 0
right = len(nums) - 1
while left < right:
if nums[left] + nums[right] == k:
return True
elif nums[left] + nums[right] > k:
right -= 1
else:
left += 1
return False