题目描述:已知两颗二叉树,将它们合并成一颗二叉树。合并规则是:都存在的结点,就将结点值加起来,否则空的位置就由另一个树的结点来代替。
例如:两颗二叉树是:
*Tree 1 *
1
/ \
3 2
/
5

Tree 2
2
/ \
1 3
\ \
4 7

合并后的树为
3
/ \
4 5
/ \ \
5 4 7
示例1
        输入:{1,3,2,5},{2,1,3,#,4,#,7}
        返回值:{3,4,5,5,4,#,7}
思路:顾名思义,合并两棵二叉树,将对应位置的节点值相加即可,使用递归无疑是最为简单直接的方式了,要合并两棵二叉树就要分别合并这两棵二叉树对应的左右子树。具体代码如下:

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

class Solution {
public:
    /**
     * 
     * @param t1 TreeNode类 
     * @param t2 TreeNode类 
     * @return TreeNode类
     */
    TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
        // write code here
        if(t1 == NULL && t2 == NULL) return NULL;
        if(t1 == NULL && t2 != NULL) return t2;
        if(t1 != NULL && t2 == NULL) return t1;
        TreeNode *root = (TreeNode*)malloc(sizeof(TreeNode));
        root->val = t1->val + t2->val;
        root->left = mergeTrees(t1->left,t2->left);
        root->right = mergeTrees(t1->right,t2->right);
        return root;
    }
};