1. 程式人生 > 實用技巧 >653. 兩數之和 IV - 輸入 BST

653. 兩數之和 IV - 輸入 BST

給定一個二叉搜尋樹和一個目標結果,如果 BST 中存在兩個元素且它們的和等於給定的目標結果,則返回 true。

案例 1:

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

Target = 9

輸出: True

案例 2:

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

Target = 28

輸出: False

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/two-sum-iv-input-is-a-bst

二叉樹前序遍歷+雙指標

# 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: def preorderTraversal(root): if not root:return [] stack, res
= [root], [] while stack: root = stack.pop() if root: res.append(root.val) if root.right: stack.append(root.right) if root.left: stack.append(root.left)
return res node=preorderTraversal(root) n=len(node) if n<2:return False l=0 r=n-1 node.sort() while l<r: sum=node[l]+node[r] if sum<k:l+=1 if sum>k:r-=1 if sum==k:return True return False

dfs

class Solution:
    def findTarget(self, root, k):
        visited = set()
        return self.dfs(root, k, visited)
    
    def dfs(self, root, k, visited):
        if not root:
            return False
        if k - root.val in visited:
            return True
        visited.add(root.val)
        return self.dfs(root.left, k, visited) or self.dfs(root.right, k, visited)