“Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。”
今天写了二叉树的中序遍历,所以打算把热题100中关于二叉树的题,都解一遍,方便大家专项学习
一、题目描述
-
给你两棵二叉树: root1 和 root2 。想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。返回合并后的二叉树。注意: 合并过程必须从两个树的根节点开始。
二、思路分析
-
合并二叉树,我们可以用递归来解题
-
首先合并两个数的根节点
-
再依次将左子树和右子树分别当作根节点进行合并
-
最后返回即可
三、AC 代码:
class Solution {
public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
//边界条件,一棵树为空直接返回另一棵树
if(root1 == null){
return root2;
}
if(root2 == null){
return root1;
}
//根节点先合并
TreeNode merged = new TreeNode(root1.val + root2.val);
//递归左子树,并挂在根节点左边
merged.left = mergeTrees(root1.left, root2.left);
//递归右子树,并挂在根节点右边
merged.right = mergeTrees(root1.right, root2.right);
//返回根节点
return merged;
}
}
四、总结:
- 好了,代码撸完,我们
总结一下:-
递归调用
-
将子树依次合并
-
最后合在一起返回
-