Skip to content

Commit afb49d0

Browse files
authored
Create two-sum-iv-input-is-a-bst.py
1 parent 9b2c39f commit afb49d0

File tree

1 file changed

+77
-0
lines changed

1 file changed

+77
-0
lines changed

Python/two-sum-iv-input-is-a-bst.py

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
# Time: O(n)
2+
# Space: O(h)
3+
4+
# Given a Binary Search Tree and a target number,
5+
# return true if there exist two elements in the BST such that their sum is equal to the given target.
6+
#
7+
# Example 1:
8+
# Input:
9+
# 5
10+
# / \
11+
# 3 6
12+
# / \ \
13+
# 2 4 7
14+
#
15+
# Target = 9
16+
#
17+
# Output: True
18+
# Example 2:
19+
# Input:
20+
# 5
21+
# / \
22+
# 3 6
23+
# / \ \
24+
# 2 4 7
25+
#
26+
# Target = 28
27+
#
28+
# Output: False
29+
30+
# Definition for a binary tree node.
31+
# class TreeNode(object):
32+
# def __init__(self, x):
33+
# self.val = x
34+
# self.left = None
35+
# self.right = None
36+
37+
class Solution(object):
38+
def findTarget(self, root, k):
39+
"""
40+
:type root: TreeNode
41+
:type k: int
42+
:rtype: bool
43+
"""
44+
class BSTIterator(object):
45+
def __init__(self, root, forward):
46+
self.__node = root
47+
self.__forward = forward
48+
self.__s = []
49+
self.__cur = None
50+
self.next()
51+
52+
def val(self):
53+
return self.__cur
54+
55+
def next(self):
56+
while self.__node or self.__s:
57+
if self.__node:
58+
self.__s.append(self.__node)
59+
self.__node = self.__node.left if self.__forward else self.__node.right
60+
else:
61+
self.__node = self.__s.pop()
62+
self.__cur = self.__node.val
63+
self.__node = self.__node.right if self.__forward else self.__node.left
64+
break
65+
66+
67+
if not root:
68+
return False
69+
left, right = BSTIterator(root, True), BSTIterator(root, False)
70+
while left.val() < right.val():
71+
if left.val() + right.val() == k:
72+
return True
73+
elif left.val() + right.val() < k:
74+
left.next()
75+
else:
76+
right.next()
77+
return False

0 commit comments

Comments
 (0)