/**
 * struct TreeNode {
 *    int val;
 *    struct TreeNode *left;
 *    struct TreeNode *right;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param t1 TreeNode类 
     * @param t2 TreeNode类 
     * @return TreeNode类
     */
    //递归版本
    //该递归函数采用前序遍历的方式同时遍历两棵树,并且完成将root2合并到root1上
    //递归函数的返回值是最终合并的头结点
    TreeNode* process(TreeNode*root1,TreeNode*root2){
        //base case
        if(root1==NULL&&root2==NULL)
            return NULL;
        else if(root1==NULL&&root2!=NULL){//此时需要返回root2因为要把root2的头接到root1上
            return root2;
        }
        else if(root1!=NULL&&root2==NULL){//此时直接返回root1即可
            return root1;
        }
        //说明都不为空,按照题意此时需要把两个节点的值相加赋给root1
            root1->val=root1->val+root2->val;
            root1->left=process(root1->left, root2->left);
            root1->right=process(root1->right, root2->right);
            return root1;
    }
    TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
        // write code here
        TreeNode* head=process(t1, t2);
        return head;
    }
};