23.合并二叉树
题目描述
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会覆盖。你需要将它们合并为一个新的二叉树.合并的规则是如果两个节点重叠,那么将它们的值作为节点合并后的新值。否则不为NULL的节点将直接作为新二叉树的节点。
解题思路
深度优先(递归)
假设两个二叉树分别为t1和t2,则可以直接对t1和t2进行深度优先遍历,比较两棵树的每个节点a和b,比较的结果有三种情况:
若a和b都不为空,则新树的此节点的值为a+b,继续比较下一层。
若a和b其中一个为空,则新树的此节点为其中的非空节点,无需继续比较。
若a和b都为空,则新树的此节点为空,无需继续比较。
Code:
class Solution{
public TreeNode mergeTrees(TreeNode t1,TreeNode t2){
//情况2
if(t1 == null){
return t2;
}
//情况2
if(t2 == null){
return t1;
}
//情况1
TreeNode ans = new TreeNode(t1.val + t2.val);
ans.left = mergeTrees(t1.left,t2.left);
ans.right = mergeTrees(t1.right,t2.right);
return ans;
}
}