LeetCode653:两数之和 IV - 输入 BST

本文介绍了一种在二叉搜索树中查找是否存在两个节点的值相加等于特定目标值的方法。通过先序遍历结合哈希集合的方式,高效地解决了这一问题,并提供了完整的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、题目

二、示例

三、思路

四、代码


一、题目

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

二、示例

案例 1:

输入: 
        5
      /   \
    3     6
  /   \      \
2     4     7

Target = 9

输出: True

案例 2:

输入: 
        5
      /   \
    3     6
   /  \       \
 2    4     7

Target = 28

输出: 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: TreeNode, k: int) -> bool:
        """
        :param root: TreeNode
        :param k: int
        :return: bool
        """
        res = set()
        def DFS(node: TreeNode):
            if not node:
                return False
            if node.val in res:
                return True
            res.add(k - node.val)
            return DFS(node.left) or DFS(node.right)
        return DFS(root)

if __name__ == '__main__':
    tree = TreeNode(5)
    tree.left = TreeNode(3)
    tree.right = TreeNode(6)
    tree.left.left = TreeNode(2)
    tree.left.right = TreeNode(4)
    tree.right.right = TreeNode(7)

    target = 9

    s = Solution()
    ans = s.findTarget(tree, target)
    print(ans)

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值