2023.7.9

这题要求合并两二叉树,若节点重叠则将节点值相加。 和之前不同的是需要同时对两棵树进行操作,我选用队列来做这题。
大致思路:通过遍历两棵树的对应节点,将节点值相加并合并到第一棵树上。如果某个节点为空,直接将另一棵树的对应节点接到第一棵树上。最终返回合并后的第一棵树的根节点。
下面上代码:
方法一:队列迭代法
class Solution {
public:
    TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
        if(root1 == nullptr) return root2;
        if(root2 == nullptr) return root1;
        queue<TreeNode*> que;
        que.push(root1);
        que.push(root2);
        while(!que.empty())
        {
            TreeNode* node1 = que.front(); que.pop();
            TreeNode* node2 = que.front(); que.pop();
            //此时两节点肯定都不为空
            node1->val += node2->val;
            //两节点的左孩子都不为空
            if(node1->left && node2->left)
            {
                que.push(node1->left);
                que.push(node2->left);
            }
            //node1节点的左孩子为空,直接用node2的左孩子覆盖。
            if(node1->left == nullptr) node1->left = node2->left;
            //两节点的右孩子都不为空
            if(node1->right && node2->right) 
            {
                que.push(node1->right);
                que.push(node2->right);
            }
            //node1节点的右孩子为空,直接用node2的右孩子覆盖。
            if(node1->right == nullptr) node1->right = node2->right;
        }
        return root1;
    }
};再更新一下递归法:
方法二:递归法
class Solution {
public:
    TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
        if(root1 == nullptr) return root2;
        if(root2 == nullptr) return root1;
        root1->val += root2->val;
        root1->left = mergeTrees(root1->left,root2->left);
        root1->right = mergeTrees(root1->right,root2->right);
        return root1;
    }
};


















