Day102 | 灵神 | 二叉树 合并二叉树

Day102 | 灵神 | 二叉树 合并二叉树

617.合并二叉树

617. 合并二叉树 - 力扣(LeetCode)

思路:

就是新建一个结点,然后找到左右子树给接上去把该节点返回就是了

接子树的时候有下面几种情况

1.如果root1当前结点不为空,而root2为空的话,那就返回root1作为上层递归函数的结点t的左子树或者右子树

2.如果root2当前结点不为空,而root1为空的话,那就返回root2作为上层递归函数的结点t的左子树或者右子树

3.如果root1当前结点为空,而root2也为空的话,那就返回nullptr

4.如果root1当前结点不为空,而root2也不为空的话,那就把这两个结点的val相加作为当前结点t的val然后返回即可

完整代码:

class Solution {
public:
    TreeNode* tra(TreeNode *t1,TreeNode *t2,TreeNode *t)
    {
       if(t==nullptr)
            t=new TreeNode;
        if(t1==nullptr&&t2!=nullptr)
            return t2;
        else if(t1!=nullptr&&t2==nullptr)
            return t1;
        else if(t1==nullptr&&t2==nullptr)
            return nullptr;
        else 
            t->val=t1->val+t2->val;
        /*这样写也行
        if(t1==nullptr)
            return t2;
        else if(t2==nullptr)
            return t1;
        else 
            t->val=t1->val+t2->val;
        */
         t->left=tra(t1->left,t2->left,t->left);
        t->right=tra(t1->right,t2->right,t->right);
        return t;
    }
    TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
        TreeNode *res=new TreeNode;
        return tra(root1,root2,res);
    }
};

灵神代码:

class Solution {
public:
    TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
        if (root1 == nullptr) return root2;
        if (root2 == nullptr) return root1;
        return new TreeNode(root1->val + root2->val,
            mergeTrees(root1->left, root2->left),    // 合并左子树
            mergeTrees(root1->right, root2->right)); // 合并右子树
    }
};

你可能感兴趣的:(刷题记录,深度优先,算法,数据结构,考研)