Skip to content

Commit a36bc3d

Browse files
committed
[Featurette] Added merging two BSTs.
1 parent 808c577 commit a36bc3d

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

structures/binary_search_tree.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,23 @@ def recur(node):
4949
recur(node.right)
5050
recur(self.head)
5151
return output
52+
53+
def merge(self, tree):
54+
55+
def mergeOntoT1(t1, t2):
56+
if not t1:
57+
return t2
58+
if not t2:
59+
return t1
60+
61+
t1.value += t2.value
62+
63+
# look left
64+
t1.left = mergeOntoT1(t1.left, t2.left)
65+
66+
# look right
67+
t1.right = mergeOntoT1(t1.right, t2.right)
68+
69+
return t1
70+
71+
mergeOntoT1(self.head, tree.head)

tests/test_bst.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,3 +66,19 @@ def test_search(self):
6666
self.assertEqual(None, tree.search(87))
6767

6868
self.assertEqual(3, tree.search(3).value)
69+
70+
def test_merge(self):
71+
72+
tree = self.make_simple_tree()
73+
74+
tree2 = BinarySearchTree()
75+
76+
tree2.insert(5)
77+
tree2.insert(9)
78+
tree2.insert(10)
79+
80+
tree.merge(tree2)
81+
82+
self.assertEqual(17, tree.head.value)
83+
self.assertEqual(27, tree.search(27).value)
84+
self.assertEqual(42, tree.search(42).value)

0 commit comments

Comments
 (0)