📜  与 BST 中的给定总和配对 | 2套(1)

📅  最后修改于: 2023-12-03 15:21:32.193000             🧑  作者: Mango

题目介绍

该题目是关于二叉搜索树的,给定一个二叉搜索树和一个整数k,找到二叉搜索树中任意两个节点的值,使得它们的和等于k。本题提供两种解决方案,分别是暴力解法和哈希表解法。

解决方案

暴力解法

暴力解法是直接遍历二叉搜索树,对于每个节点,遍历二叉搜索树,找到与该节点值相加等于k的节点。时间复杂度为O(n^2)。

下面是python代码实现:

class Solution:
    def findTarget(self, root: TreeNode, k: int) -> bool:
        if not root:
            return False
        queue = [root]
        while queue:
            node = queue.pop()
            if self.search(root, k - node.val, node):
                return True
            if node.left:
                queue.append(node.left)
            if node.right:
                queue.append(node.right)
        return False

    def search(self, root, value, node):
        if not root:
            return False
        if root == node:
            return False
        if root.val == value:
            return True
        elif root.val > value:
            return self.search(root.left, value, node)
        else:
            return self.search(root.right, value, node)
哈希表解法

哈希表解法是利用哈希表来记录二叉搜索树中已经找到的节点值。对于每个节点,遍历二叉搜索树,找到哈希表中是否存在k-node.val的节点值,如果存在返回True,否则将该节点的值加入哈希表。时间复杂度为O(n)。

下面是python代码实现:

class Solution:
    def __init__(self):
        self.hashmap = set()

    def findTarget(self, root: TreeNode, k: int) -> bool:
        if not root:
            return False
        queue = [root]
        while queue:
            node = queue.pop()
            if k - node.val in self.hashmap:
                return True
            self.hashmap.add(node.val)
            if node.left:
                queue.append(node.left)
            if node.right:
                queue.append(node.right)
        return False

总结

本题提供了二叉搜索树的两种解决方案,暴力解法和哈希表解法。暴力解法时间复杂度为O(n^2),而哈希表解法时间复杂度为O(n)。对于本题,哈希表解法更加高效。