栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

合并二叉树

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

合并二叉树

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

class Solution {
public:
    TreeNode* mergeTrees(TreeNode* r1, TreeNode* r2) {
        if (r1 == nullptr) return r2;
        if (r2 == nullptr) return r1;
        queue 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的改变。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/931377.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号