题目来源:
leetcode题目,网址:617. 合并二叉树 - 力扣(LeetCode)
解题思路:
同时遍历两颗二叉树,按要求操作即可。
解题代码:
//覆盖添加
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
if(root2==null){
return root1;
}
if(root1==null){
root1=new TreeNode();
}
root1.val+=root2.val;
if(root1.left==null && root2.left!=null){
root1.left=root2.left;
}else{
mergeTrees(root1.left,root2.left);
}
if(root1.right==null && root2.right!=null){
root1.right=root2.right;
}else{
mergeTrees(root1.right,root2.right);
}
return root1;
}
}
//合并为一颗新树
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
TreeNode res;
if(root1==null && root2==null){
return root1;
}
res=new TreeNode();
assistMergeTrees(res,root1,root2);
return res;
}
public void assistMergeTrees(TreeNode res,TreeNode root1,TreeNode root2){
int val=0;
if(root1!=null)
val+=root1.val;
if(root2!=null)
val+=root2.val;
res.val=val;
if((root1!=null &&root1.left!=null) || (root2!=null&& root2.left!=null)){
res.left=new TreeNode();
TreeNode root1Left= root1==null? null:root1.left;
TreeNode root2Left= root2==null?null:root2.left;
assistMergeTrees(res.left,root1Left,root2Left);
}else
res.left=null;
if((root1!=null &&root1.right!=null) || (root2!=null&&root2.right!=null)){
res.right=new TreeNode();
TreeNode root1Right= root1==null?null:root1.right;
TreeNode root2Right= root2==null?null:root2.right;
assistMergeTrees(res.right,root1Right,root2Right);
}else
res.right=null;
}
}
总结:
写完代码才发现题目要求将一棵树覆盖在另一棵树上,重写了代码。
官方题解给出了深度优先和广度优先两种解法。