|
|
@@ -0,0 +1,52 @@ |
|
|
|
# Definition for a binary tree node. |
|
|
|
class TreeNode: |
|
|
|
def __init__(self, x): |
|
|
|
self.val = x |
|
|
|
self.left = None |
|
|
|
self.right = None |
|
|
|
|
|
|
|
class Solution: |
|
|
|
def mergeTrees(self, t1, t2): |
|
|
|
# One way to do this is construct an array representing each tree and then combine them one by one |
|
|
|
# index is established with: 2**level + position |
|
|
|
# so in tree: |
|
|
|
# 1 |
|
|
|
# 2 3 |
|
|
|
# 4 5 6 7 |
|
|
|
# The numbers shown are the indexes |
|
|
|
# for construction is it important to note leftChild = 2 * current |
|
|
|
# and rightChild = 2 * current + 1 |
|
|
|
# The tricky part will be ensuring the array is large enough, but we can pad with None's I suppose, probably not optimal |
|
|
|
# but it'll do, and I think be pretty error proof |
|
|
|
|
|
|
|
# Actually scratch all this, I think it shouldn't be too hard to build the tree as we traverse both simultaneously |
|
|
|
# might need to make a recursive function first though |
|
|
|
|
|
|
|
return self.mergeTreesRecursive(t1, t2) |
|
|
|
|
|
|
|
def mergeTreesRecursive(self, t1, t2): |
|
|
|
|
|
|
|
# base case is neither tree has a child to add |
|
|
|
if t1 is None and t2 is None: |
|
|
|
return None |
|
|
|
|
|
|
|
if t1 is None: |
|
|
|
newNode = TreeNode(t2.val) |
|
|
|
newNode.left = self.mergeTreesRecursive(t2.left, None) |
|
|
|
newNode.right = self.mergeTreesRecursive(t2.right, None) |
|
|
|
elif t2 is None: |
|
|
|
newNode = TreeNode(t1.val) |
|
|
|
newNode.left = self.mergeTreesRecursive(t1.left, None) |
|
|
|
newNode.right = self.mergeTreesRecursive(t1.right, None) |
|
|
|
else: |
|
|
|
newNode = TreeNode(t1.val + t2.val) |
|
|
|
newNode.left = self.mergeTreesRecursive(t1.left, t2.left) |
|
|
|
newNode.right = self.mergeTreesRecursive(t1.right, t2.right) |
|
|
|
|
|
|
|
return newNode |
|
|
|
|
|
|
|
s = Solution() |
|
|
|
print("Expected: Tree with root 3") # can't be bothered testing the whole tree |
|
|
|
t1 = TreeNode(1) |
|
|
|
t2 = TreeNode(2) |
|
|
|
print("Got: Tree with root", s.mergeTrees(t1, t2).val) |