思路不难,下笔难...
我泰菜了(灬ꈍ ꈍ灬)
方法1:广度优先搜索
/**
* 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) {
// 1.广度优先搜索
if(root1==null) return root2;
if(root2==null) return root1;
Queue<TreeNode> queue=new LinkedList<>();
Queue<TreeNode> queue1=new LinkedList<>();
Queue<TreeNode> queue2=new LinkedList<>();
TreeNode merge=new TreeNode(root1.val+root2.val);
queue.offer(merge);
queue1.offer(root1);
queue2.offer(root2);
while(!queue.isEmpty()){
TreeNode node=queue.poll(), node1=queue1.poll(), node2=queue2.poll();
TreeNode left1=node1.left, right1=node1.right, left2=node2.left, right2=node2.right;
if(left1!=null && left2!=null){
TreeNode tmp=new TreeNode(left1.val+left2.val);
node.left=tmp;
queue.offer(tmp);
queue1.offer(left1);
queue2.offer(left2);
}
if(left1==null) node.left=left2;
if(left2==null) node.left=left1;
if(right1!=null && right2!=null){
TreeNode tmp=new TreeNode(right1.val+right2.val);
node.right=tmp;
queue.offer(tmp);
queue1.offer(right1);
queue2.offer(right2);
}
if(right1==null) node.right=right2;
if(right2==null) node.right=right1;
}
return merge;
}
}
不创建新的树,直接在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) {
// 3.广度优先——不创建新的树,直接在root1上作变动(挂载)
if(root1==null || root2==null)
return root1==null?root2:root1;
Queue<TreeNode> queue=new LinkedList<>();
queue.offer(root1);
queue.offer(root2);
while(!queue.isEmpty()){
TreeNode node1=queue.poll();
TreeNode node2=queue.poll();
node1.val+=node2.val;
if(node1.left!=null && node2.left!=null){
queue.offer(node1.left);
queue.offer(node2.left);
}
if(node1.left==null) node1.left=node2.left;
if(node1.right!=null && node2.right!=null){
queue.offer(node1.right);
queue.offer(node2.right);
}
if(node1.right==null) node1.right=node2.right;
}
return root1;
}
}
2.深度优先搜索
package linkedList;
import java.time.LocalDate;
import java.util.*;
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 {
// Definition for a binary tree node.
public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
// 2.深度优先搜索
if(root1==null) return root2;
if(root2==null) return root1;
TreeNode merge=new TreeNode(root1.val+root2.val);
merge.left=mergeTrees(root1.left,root2.left);
merge.right=mergeTrees(root1.right,root2.right);
return merge;
}
// 先根遍历
public void printTree(TreeNode node){
if(node==null) return;
System.out.println(node.val);
if(node.left!=null) printTree(node.left);
if(node.right!=null) printTree(node.right);
}
public static void main(String[] args) {
// 输入:root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]
// 输出:[3,4,5,5,4,null,7]
Solution solution=new Solution();
TreeNode node1=new TreeNode(1);
TreeNode l1=new TreeNode(3);
node1.left=l1;
TreeNode r1=new TreeNode(2);
node1.right=r1;
l1.left=new TreeNode(5);
TreeNode node2=new TreeNode(2);
TreeNode l2=new TreeNode(1);
node2.left=l2;
TreeNode r2=new TreeNode(3);
node2.right=r2;
l2.right=new TreeNode(4);
r2.right=new TreeNode(7);
TreeNode merge=solution.mergeTrees(node1,node2);
solution.printTree(merge);
}
}