返回
二叉树合并:简单二叉树问题的序幕
前端
2023-12-18 12:48:21
今天,我们开启前端算法必刷题系列的第76题,以轻松的二叉树问题作为开场,为后续更复杂的二叉树问题做好铺垫。
二叉树问题的关键在于理解对称性,并巧妙利用递归思想,对左右子树进行分而治之。
- 合并二叉树
标签:二叉树、简单
问题
给定两个二叉树 root1
和 root2
,合并这两个二叉树,合并后的新二叉树由以下规则构成:
- 新二叉树的根节点为
root1
和root2
的根节点合并后的结果。 - 新二叉树的左子树为
root1
的左子树和root2
的左子树合并后的结果。 - 新二叉树的右子树为
root1
的右子树和root2
的右子树合并后的结果。
示例:
Input: root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]
Output: [3,4,5,5,4,null,7]
解题思路
二叉树合并问题的关键在于理解二叉树的对称性,并巧妙利用递归思想。对于给定的两个二叉树,我们可以使用递归函数进行合并:
- 首先判断两个二叉树的根节点是否都为空。若都为空,则合并后的结果也为空。
- 若两个二叉树的根节点都不为空,则合并后的根节点为两个根节点的值之和。
- 对于合并后的根节点的左子树,递归调用函数合并
root1
的左子树和root2
的左子树。 - 对于合并后的根节点的右子树,递归调用函数合并
root1
的右子树和root2
的右子树。
代码实现
const mergeTrees = (root1, root2) => {
if (!root1 && !root2) return null;
if (!root1) return root2;
if (!root2) return root1;
root1.val += root2.val;
root1.left = mergeTrees(root1.left, root2.left);
root1.right = mergeTrees(root1.right, root2.right);
return root1;
};
复杂度分析
- 时间复杂度:O(m + n),其中 m 和 n 分别为两个二叉树
root1
和root2
的节点数。 - 空间复杂度:O(m + n),用于递归调用栈的空间。
总结
二叉树合并问题是二叉树问题的基础,理解二叉树的对称性以及递归思想在解决此类问题中至关重要。本文清晰易懂地讲解了二叉树合并问题的解法,为后续更复杂的二叉树问题打下了坚实的基础。