/**
 * 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 (root1 == null) {
            return root2;
        }
        if (root2 == null) {
            return root1;
        }
        Queue<TreeNode> que = new LinkedList<>();
        que.offer(root1);
        que.offer(root2);
        while (!que.isEmpty()) {
            TreeNode tmp1 = que.poll();
            TreeNode tmp2 = que.poll();
            tmp1.val += tmp2.val;
            if (tmp1.left != null && tmp2.left != null) {
                que.offer(tmp1.left); // 层序遍历,每次poll两棵树对应位置的两个点
                que.offer(tmp2.left);
            } else if (tmp1.left == null && tmp2.left != null) {
                tmp1.left = tmp2.left;
            }
            if (tmp1.right != null && tmp2.right != null) {
                que.offer(tmp1.right);
                que.offer(tmp2.right);
            }  else if (tmp1.right == null && tmp2.right != null) {
                tmp1.right = tmp2.right;
            }
        }
        return root1;   
    }
}