这个题解使用深度优先搜索(DFS)的方式来合并两棵二叉树。通过同时遍历两棵树的节点,将对应位置的节点值相加,构建出合并后的新二叉树。如果某个位置只在一棵树上有节点,则直接将该节点加入新树中;如果两棵树的对应位置都没有节点,则不进行操作。
时间复杂度: O(n)
空间复杂度: O(log(n))
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def mergeTrees(self, root1: TreeNode, root2: TreeNode) -> TreeNode:
def dfs(p, q):
# 如果两棵树的当前节点都为空,则返回空节点
if p is None and q is None:
return
# 如果树1的当前节点为空,则返回树2的当前节点
elif p is None:
return q
# 如果树2的当前节点为空,则返回树1的当前节点
elif q is None:
return p
else:
# 创建新节点,值为两棵树当前节点的值之和
root = TreeNode(p.val + q.val)
# 递归合并左子树
root.left = dfs(p.left, q.left)
# 递归合并右子树
root.right = dfs(p.right, q.right)
# 返回合并后的新节点
return root
# 从根节点开始合并两棵树
return dfs(root1, root2)