【二叉树】合并二叉树

解题思路:递归解决

递归结束条件:传入的两个结点均为叶子结点,或者传入的只有一个结点存在

将root1结点作为合并过后的新树

  1. 若两个结点都存在,合并他们的值
  2. 若一棵树没有另一棵树对应的子树,则不必进入循环修改
  3. 判断它们的左右孩子情况。若root2有的孩子root1没有,将root2的孩子复制给root1
  4. 返回root1
struct TreeNode* mergeTrees(struct TreeNode* root1, struct TreeNode* root2){
    if(!root1 && !root2)
        return NULL;
    if(!root1 && root2)
        return root2;
    if(root1 && !root2)
        return root1;
    // 1.若两个结点都存在,合并他们的值
    if(root1 && root2)
        root1->val += root2->val;
    // 2.若一棵树没有另一棵树对应的子树,则不必进入循环修改
    if(root1->left && root2->left)
        mergeTrees(root1->left, root2->left);
    if(root1->right && root2->right)
        mergeTrees(root1->right, root2->right);
    // 3.判断它们的左右孩子情况。若root2有的孩子root1没有,将root2的孩子复制给root1
    if(!root1->left && root2->left)
        root1->left = root2->left;
    if(!root1->right && root2->right)
        root1->right = root2->right;
    // 4.返回root1
    return root1;
}