leetcode_653 两数之和 IV - 输入 BST

53 阅读1分钟

要求

给定一个二叉搜索树 root 和一个目标结果 k,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。

示例 1:

image.png

输入: root = [5,3,6,2,4,null,7], k = 9
输出: true

示例 2:

image.png

输入: root = [5,3,6,2,4,null,7], k = 28
输出: false

示例 3:

输入: root = [2,1,3], k = 4
输出: true

示例 4:

输入: root = [2,1,3], k = 1
输出: false

示例 5:

输入: root = [2,1,3], k = 3
输出: true

提示:

  • 二叉树的节点个数的范围是  [1, 104].
  • -104 <= Node.val <= 104
  • root 为二叉搜索树
  • -105 <= k <= 105

核心代码

# 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:
        res = []
        _queue = [root]
        while _queue:
            nxt = []
            for node in _queue:
                res.append(node.val)
                if node.left:
                    nxt.append(node.left)
                if node.right:
                    nxt.append(node.right)
            _queue = nxt
        for i in range(len(res) - 1):
            for j in range(i + 1,len(res)):
                if res[i] + res[j] == k:
                    return True
        return False

image.png

解题思路:其实这个题就是一个广度优先遍历的题,我们先将所有的值扫描出来,然后我们循环遍历看看加和是不是等于target即可,比较简单。