Solution 1
# 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: TreeNode, t2: TreeNode) -> TreeNode:
if not t1: return t2
if not t2: return t1
ans = TreeNode(t1.val + t2.val)
ans.left = self.mergeTrees(t1.left, t2.left)
ans.right = self.mergeTrees(t1.right, t2.right)
return ans
Time complexity is O(n). Space complexity is O(m). n is the minimum number of nodes from the two given trees. m is the depth.
Solution 2
# 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: TreeNode, t2: TreeNode) -> TreeNode:
if not t1: return t2
if not t2: return t1
stack = []
stack.append((t1, t2))
while stack:
t = stack.pop()
if t[1]: t[0].val += t[1].val
else: continue
if t[0].left is None: t[0].left = t[1].left
else: stack.append((t[0].left, t[1].left))
if t[0].right is None: t[0].right = t[1].right
else: stack.append((t[0].right, t[1].right))
return t1
Time complexity is O(n). Space complexity is O(n).