15. 合并二叉树

title: 合并二叉树

📃 题目描述

题目链接: 合并二叉树

15. 合并二叉树

🔔 解题思路

递归法:采用前序遍历方式进行简单的构造即可,下面是优化的代码;

class Solution {
public:
    TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
        if (root1 == nullptr) return root2; // 如果root2也是空,那么就返回了nullptr;
        if (root2 == nullptr) return root1;

        // 以root1这个树作为基本树,改变树的结构;
        // 此时root1和root2必然存在 , 采用前序遍历的方式;
        root1->val += root2->val;
        root1->left = mergeTrees(root1->left, root2->left);
        root1->right = mergeTrees(root1->right, root2->right);
        return root1;
    }
};

迭代法:以root1为答案,更改root1的树结构!依据对称性!采用队列来存储对应的节点,root1和root2中对应的节点val进行相加,但是问题在于:只有一棵树的存在某节点,另一棵树没有,如何解决? 采用节点转移!可以自己思考,然后看代码:

class Solution {
public:
    TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
        if (root1 == nullptr) return root2;
        if (root2 == nullptr) return root1;

        queue que;
        que.push(root1);
        que.push(root2);
        while (!que.empty()) { // 注意:是以root1为基本树结构,改变root1的结构!
            TreeNode* cur1 = que.front(); que.pop();
            TreeNode* cur2 = que.front(); que.pop();

            //cur1 和cur2是一定存在的,非空的, 看后面注释即可知
            cur1->val += cur2->val;

            // cur1(对应root1树里) 存在左子树,cur2(对应root2树里) 存在左子树
            if (cur1->left && cur2->left) {
                que.push(cur1->left);
                que.push(cur2->left);
            }

            // cur1(对应root1树里) 存在右子树,cur2(对应root2树里) 存在右子树
            if (cur1->right && cur2->right) {
                que.push(cur1->right);
                que.push(cur2->right);
            }

            // cur1(对应root1树里) 不存在左子树,cur2(对应root2树里)存在左子树
            if (!cur1->left && cur2->left) {
                // 将cur2 的左子树转移到cur1中!
                cur1->left = cur2->left;
            }

            // cur1(对应root1树里) 不存在右子树,cur2(对应root2树里)存在右子树
            if (!cur1->right && cur2->right) {
                // 将cur2 的右子树转移到cur1中!
                cur1->right = cur2->right;
            }

            // 而cur1存在 左/右子树, cur2不存在左/右子树,不需要操作,因为不需要改变cur1 左/右子树的值!
        }
        return root1;
    }
};

💥 复杂度分析

  • 时间复杂度:o(n);
  • 空间复杂度: O(n);

Original: https://www.cnblogs.com/D-booker/p/16322671.html
Author: D-booker
Title: 15. 合并二叉树

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/713321/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Salt-Formulas的使用

    Saltstack自0.17.x版本开始引进Formulas的概念,旨在通过简化State和集成数据来实现State的友好管理。根据SALT FORMULAS的官方文档,在完成手动…

    技术杂谈 2023年5月31日
    0138
  • 挂载(mount)深入理解

    首先引用一句 wiki 上的定义来开篇: Mounting takes place before a computer can use any kind of storage de…

    技术杂谈 2023年5月31日
    090
  • Redis集群(二)哨兵模式

    一、作用和架构 1. 作用 Redis Sentinel,即Redis哨兵,在Redis 2.8版本开始引入。哨兵的核心功能是 主节点的自动故障转移。下面是Redis官方文档对于哨…

    技术杂谈 2023年7月24日
    082
  • 哎,又跟HR在小群吵了一架!

    原创不易,求分享、求一键三连 书接上文: 跟HR在大群吵了一架… 难道,降本增效就是裁员吗 前段时间我问了自己一个问题,如果自己真的是 公司内部的外包团队,会怎么样?自…

    技术杂谈 2023年6月1日
    086
  • 图片优化

    前面的话 本文将详细介绍前端项目中的图片相关的优化方案 图片格式 目前在前端的开发中常用的图片格式有jpg、png、gif,png8、png24、png32、svg和webp 【g…

    技术杂谈 2023年5月31日
    099
  • Go测试技术分享(一):场景化接口Case编写

    一、前言 本人负责的支付清结算方向的测试工作,在测试项目中,会出现流程化的接口调用,请求完一个接口后,继续请求另一个接口(这里的接口可以指Http,也指rpc接口),这里以一个真实…

    技术杂谈 2023年5月31日
    088
  • hadoop项目之求出每年二月的最高气温(Combiner优化)

    hadoop项目之求出每年二月的最高气温(Combiner优化) 一、项目结构 一、java实现随机生成日期和气温 package com.shujia.weather; impo…

    技术杂谈 2023年7月11日
    066
  • 高扩展性网站的原则

    ============================================================================== 本博客已经废弃,不在维…

    技术杂谈 2023年6月1日
    0107
  • Hadoop Ls命令添加显示条数限制參数

    前言 在hadoop的FsShell命令中,预计非常多人比較经常使用的就是hadoop fs -ls,-lsr,-cat等等这种与Linux系统中差点儿一致的文件系统相关的命令.可…

    技术杂谈 2023年5月31日
    0105
  • QSC的算法讲座第三季开始啦

    【背景】我已经毕业两年了,正所谓金三银四,现在正是刷题跳槽的好时节。上周同组的兄弟也讲了一下做自媒体的好处,所以我也开始重新举办算法讲堂了。 【时间】2020年12月7日~2020…

    技术杂谈 2023年6月1日
    083
  • 5个节约生命的Python小技巧

    前言 Python是一种强大且易上手的语言,语法简洁优雅,不像Java那么繁琐废话,并且有一些特殊的函数或语法可以让代码变得更加 简短精悍。根据我的经验,下面介绍常用的5个Pyth…

    技术杂谈 2023年6月21日
    0107
  • tryenablingthebreakwritelocksoptionforthecleanup

    如图: 一般是在中断:提交/更新的时候产生的。 一般两种解决方式(可以参考其他的): 1,重启ide(我的就是这么神奇,重启idea后好了); 2,在cleanup时勾选 brea…

    技术杂谈 2023年7月24日
    075
  • 最左前缀有手就会,那索引下推呢?

    联合索引的最左前缀原则属于面试高频题,想必大部分同学都知道一些,但是,那些不符合最左前缀的部分,会怎么样呢(索引下推) 索引下推不算高频题,知道的同学应该不是很多(不过并不代表有啥…

    技术杂谈 2023年7月25日
    0241
  • 更优雅地使用命令行

    工欲善其事,必先利其器,通过武装自己的命令行工具,从而更优雅地使用命令行,可以使工作更加高效并且有趣。本文将以下几个方面来介绍命令行的使用技巧和提效工具 CLI 一键呼入呼出 it…

    技术杂谈 2023年5月31日
    090
  • Redis和数据库的数据一致性问题

    在数据读多写少的情况下作为缓存来使用,恐怕是Redis使用最普遍的场景了。当使用Redis作为缓存的时候,一般流程是这样的。 如果缓存在Redis中存在,即缓存命中,则直接返回数据…

    技术杂谈 2023年7月24日
    091
  • 2个函数宏技巧

    1.用宏调用对象函数 #define FOR_EACH_OBSERVER(ObserverType, observer_list, func) \ do{ \ CObserverL…

    技术杂谈 2023年5月31日
    082
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球