返回
从头理解合并二叉树,从此算法难题不再难!
见解分享
2023-11-28 01:52:43
前言
算法在计算机科学中占据着举足轻重的地位,是解决复杂问题和优化程序性能的关键。LeetCode每日一题栏目为您精选最具代表性的算法题,带领您逐题攻破,不断提升您的算法技能。今天,我们就来共同挑战LeetCode第617题——合并二叉树。
题目
给定两棵二叉树 root1
和 root2
,请将它们合并成一棵新的二叉树。合并后的树的根节点为 root1
的根节点,且在 root1
上的每个节点都有一个与在 root2
上的相同节点合并而成的对应节点。此外,合并后的树中每个节点的左子树对应 root1
中对应节点的左子树,右子树对应 root2
中对应节点的右子树。
示例 1:
输入:root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]
输出:[3,4,5,5,4,null,7]
示例 2:
输入:root1 = [1], root2 = [1,2]
输出:[2,2]
思考过程
合并二叉树的本质是将两棵树的节点一一对应地合并,并保持树的结构不变。因此,我们可以采用递归的方式来解决这个问题。具体而言,我们可以遵循以下步骤:
- 如果
root1
和root2
都为null
,则返回null
。 - 如果
root1
为null
,则返回root2
。 - 如果
root2
为null
,则返回root1
。 - 将
root1
和root2
的值相加,并将其作为合并后的树的根节点。 - 将
root1
的左子树与root2
的左子树合并,并将其作为合并后的树的左子树。 - 将
root1
的右子树与root2
的右子树合并,并将其作为合并后的树的右子树。
通过以上步骤,我们就可以将两棵二叉树合并成一棵新的二叉树。
实现方法
以下是合并二叉树的实现方法:
def mergeTrees(root1, root2):
if not root1 and not root2:
return None
if not root1:
return root2
if not root2:
return root1
root = TreeNode(root1.val + root2.val)
root.left = mergeTrees(root1.left, root2.left)
root.right = mergeTrees(root1.right, root2.right)
return root
时间复杂度
合并二叉树的时间复杂度为 O(m + n)
,其中 m
和 n
分别为 root1
和 root2
的节点数。
空间复杂度
合并二叉树的空间复杂度为 O(m + n)
,其中 m
和 n
分别为 root1
和 root2
的节点数。
结语
通过本指南,您已经掌握了合并二叉树的思想和实现方法,并对递归算法有了更深入的理解。今后,您在面对类似的算法问题时,能够更加从容地应对。算法学习是一个循序渐进的过程,需要不断地练习和总结。希望您能够继续挑战自我,不断提升自己的算法技能。