Skip to content

Commit de605d0

Browse files
authored
Create all-elements-in-two-binary-search-trees.py
1 parent a3ecb4a commit de605d0

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# Time: O(n)
2+
# Space: O(h)
3+
4+
# Definition for a binary tree node.
5+
class TreeNode(object):
6+
def __init__(self, x):
7+
self.val = x
8+
self.left = None
9+
self.right = None
10+
11+
12+
class Solution(object):
13+
def getAllElements(self, root1, root2):
14+
"""
15+
:type root1: TreeNode
16+
:type root2: TreeNode
17+
:rtype: List[int]
18+
"""
19+
def inorder_gen(root):
20+
result, stack = [], [(root, False)]
21+
while stack:
22+
root, is_visited = stack.pop()
23+
if root is None:
24+
continue
25+
if is_visited:
26+
yield root.val
27+
else:
28+
stack.append((root.right, False))
29+
stack.append((root, True))
30+
stack.append((root.left, False))
31+
yield None
32+
33+
result = []
34+
left_gen, right_gen = inorder_gen(root1), inorder_gen(root2)
35+
left, right = next(left_gen), next(right_gen)
36+
while left is not None or right is not None:
37+
if right is None or (left is not None and left < right):
38+
result.append(left)
39+
left = next(left_gen)
40+
else:
41+
result.append(right)
42+
right = next(right_gen)
43+
return result
44+

0 commit comments

Comments
 (0)