合并二叉树

在这里插入图片描述

方法一:迭代法(层序遍历)

class Solution {
public:
    TreeNode* mergeTrees(TreeNode* r1, TreeNode* r2) {
        if (r1 == nullptr) return r2;
        if (r2 == nullptr) return r1;
        queue<TreeNode*> que;
        que.push(r1);
        que.push(r2);
        while (!que.empty()) {
            TreeNode* n1 = que.front();
            que.pop();
            TreeNode* n2 = que.front();
            que.pop();
            n1->val += n2->val;
            if (n1->left != nullptr && n2->left != nullptr) {
                que.push(n1->left);
                que.push(n2->left);
            }
            if (n1->right != nullptr && n2->right != nullptr) {
                que.push(n1->right);
                que.push(n2->right);
            }
            if (n1->left == nullptr && n2->left != nullptr) {
                n1->left = n2->left;
            }
            if (n1->right == nullptr && n2->right != nullptr) {
                n1->right = n2->right;
            }
        }
        return r1;
    }
};

思路:经典的层序遍历,只不过这次是两棵树,我们只需要每次把两棵树的节点个入队列一个,然后每次出两次队列,然后对这两个节点进行比较即可,类似于以前写的对称二叉树的感觉。

方法二:递归

class Solution {
public:
    TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
        if (t1 == NULL) return t2; // 如果t1为空,合并之后就应该是t2
        if (t2 == NULL) return t1; // 如果t2为空,合并之后就应该是t1
        // 修改了t1的数值和结构
        t1->val += t2->val;                             // 中
        t1->left = mergeTrees(t1->left, t2->left);      // 左
        t1->right = mergeTrees(t1->right, t2->right);   // 右
        return t1;
    }
};

思路:通过先序遍历,完成对t1的改变。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值