653. 兩數之和 IV - 輸入 BST
阿新 • • 發佈:2020-10-05
給定一個二叉搜尋樹和一個目標結果,如果 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)