文章目录
- 1.题目
- 2.代码
1.题目
- 题目要求
- eg:
示例 1:
输入:
Tree 1 Tree 2
1 2
/ \ / \
3 2 1 3
/ \ \
5 4 7
输出:
合并后的树:
3
/ \
4 5
/ \ \
5 4 7
- 思路:处理二叉树问题的神器就是递归
 如果要处理的相同位置上的两个结点都不存在的话,直接返回即可;
 如果 t1 存在,t2 不存在,就以 t1 的结点值建立一个新结点,然后分别对 t1 的左右子结点和空结点调用递归函数;
 如果 t1 不存在,t2 存在,就以 t2 的结点值建立一个新结点,然后分别对 t2 的左右子结点和空结点调用递归函数;
 如果 t1 和 t2 都存在,就以 t1 和 t2 的结点值之和建立一个新结点,然后分别对 t1 的左右子结点和 t2 的左右子结点调用递归函数;
2.代码
struct TreeNode{
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode() : val(0), left(NULL),right(NULL) {}
    TreeNode(int val): val(val).left(NULL),right(NULL) {}
    TreeNode(int val, TreeNode* left, TreeNode* right) : val(val),left(left),right(right) {}
};
class Solution {
public:
    TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
         TreeNode* res=NULL;
         dfs(root1,root2,res);
         return res;
    }
    void dfs(TreeNode* root1, TreeNode* root2, TreeNode* res)
    {
        if (!root1 && !root2) return NULL;
        if (root1 && !root2)
        {
            res=new TreeNode(root1->val);
            dfs(root1->left,NULL,res->left);
            dfs(root1->right,NULL,res->right);
        }
        else if (!root1 && root2)
        {
            res=new TreeNode(root2->val);
            dfs(NULL,root2->right,res->right);
            dfs(NULL,root2->left,res->left);
        }
        else 
        {
            res=new TreeNode(root1->val + root2->val);
            dfs(root1->left,root2->left,res->left);
            dfs(root1->right,root2->right,res->right);
        }
    }
};                










