两个二叉树的合并

2023-11-14

将给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。
你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-two-binary-trees

这里可以使用迭代和递归两种方式来解决。时间和空间复杂度都是O(N)。
首先我们使用递归

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def mergeTrees(self, t1, t2):
        """
        :type t1: TreeNode
        :type t2: TreeNode
        :rtype: TreeNode
        """
        if t1 is None:
            return t2
        if t2 is None:
            return t1
        t1.val += t2.val
        t1.left = self.mergeTrees(t1.left, t2.left)
        t1.right = self.mergeTrees(t1.right, t2.right)
        return t1

接下来是迭代。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
        if (t1 == null)
            return t2;
        Stack < TreeNode[] > stack = new Stack < > ();
        stack.push(new TreeNode[] {t1, t2});
        while (!stack.isEmpty()) {
            TreeNode[] t = stack.pop();
            if (t[0] == null || t[1] == null) {
                continue;
            }
            t[0].val += t[1].val;
            if (t[0].left == null) {
                t[0].left = t[1].left;
            } else {
                stack.push(new TreeNode[] {t[0].left, t[1].left});
            }
            if (t[0].right == null) {
                t[0].right = t[1].right;
            } else {
                stack.push(new TreeNode[] {t[0].right, t[1].right});
            }
        }
        return t1;
    }
}

作者:LeetCode
链接:https://leetcode-cn.com/problems/merge-two-binary-trees/solution/he-bing-er-cha-shu-by-leetcode/
来源:力扣(LeetCode)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

两个二叉树的合并 的相关文章

  • 二叉树之层次遍历(js)

    二叉树之层次遍历 输入一棵二叉树 你的任务是从上到下 从左到右的顺序输出各个结点的值 每个结点都是按照从根节点到它移动序列给出 L表示左 R表示右 在输入中 每个结点的左右括号之间没有空格 相邻节点之间用一个空格隔开 输入 11 LL 7
  • 二叉树的基本概念及性质

    文章目录 一 基本概念 二 二叉树的种类 二叉树 满二叉树 完全二叉树 二叉搜索树 平衡二叉搜索树 三 二叉树的性质 性质一 性质二 性质三 性质四 性质五 一 基本概念 树是 n 个结点的有限集 在任意一颗非空树中 1 有且仅有一个特定的
  • 数据结构中二叉树实现及部分操作

    谈二叉树之前 我们先来看看树的定义 树 由N N gt 0 个结点构成的集合 对N gt 1的树 1 有一个特殊的结点 称为根结点 根节点没有前驱结点 2 除根节点外 其余结点被分成M M gt 0 个互不相交的集合T1 T2 Tm 其中每
  • 有趣的数据结构算法16——线索二叉树的构建

    有趣的数据结构算法16 线索二叉树的构建 什么是线索二叉树 线索二叉树的实现形式 线索二叉树的代码实现 线索二叉树的初始化 线索的串联 全部实现代码 GITHUB下载连接 深度遍历不仅仅有递归的方法噢 还有通过建立线索二叉树进行遍历的方法
  • 剑指 Offer 28. 对称的二叉树 -- 递归

    0 题目描述 leetcode原题链接 剑指 Offer 28 对称的二叉树 1 递归解法 对称二叉树定义 对于树中 任意两个对称节点 L L L 和 R R R 一定有
  • 二叉排序树的基本操作

    二叉排序树的应用 利用二叉链表存储二叉排序树 输入一组任意序列 实现二叉排序树的创建 插入 删除 中序遍历 要求 有菜单进行选择 安排 2020 6 4 晴朗 二叉排序树的基本定义 1 左子树的所有节点小于根节点 2 若右子树非空 则右子树
  • 优化算法学习(LM算法)

    文章目录 推荐书籍 理论理解 程序实现 ceres安装 代码 推荐书籍 建议学习 METHODS FOR NON LINEAR LEAST SQUARES PROBLEMS http www2 imm dtu dk pubdb views
  • 二叉树的性质

    二叉树的性质以及满二叉树 完全二叉树 性质一 在二叉树的第i层 最多有2的 i 1 次方个结点i gt 1 性质二 深度为k的二叉树上最多有含有2的k次方 1个结点 k gt 1 性质三 对于任何一个二叉树 若它含有n0个叶子结点 n2个度
  • unsigned long long妙用

    洛谷 P2181 对角线 使用unsigned long long可以防止爆精度 以下是各精度的范围 include
  • 关于算法,我们都应知道的

    定义 算法是指对特定问题求解步骤的一种描述 特性 1 有穷性 算法是由若干条指令组成的有穷序列 总是在执行若干次后结束 不可能永不停止 2 确定性 每条语句有确定的含义 无歧义 3 可行性 算法在当前环境条件下可以通过有限次运算实现 4 输
  • 二叉链表之寻找两节点的最近公共祖先☆

    题目 p q分别为指向该二叉树中任意两个节点的指针 试编写算法ancestor root p q r 找到p q的最近公共祖先节点r 分析 上一道题其实可以给我们一些启示 就是我们可以将任意节点的祖先存起来 那这里我们也可以用两个栈 分别将
  • 二叉树——初识

    链表 gt 二叉树 gt 二叉查找树 gt 平衡二叉树 二叉树时间复杂度 O logn 即2 x 树的深度 N 如 21亿点需要查找几次 2 32 21亿 查找32次 1 满二叉树 2 完全二叉树 设二叉树的深度为h 除第 h 层外 其它各
  • 【数据结构】树与二叉树总结(一)

    数据结构 树与二叉树的总结 一 1 AVL树 动态平衡二叉树 树表的查找 2 哈夫曼树 二叉树的应用 3 树 树与二叉树的转换 4 分裂树 5 S K R 注 K为结点 R为关系 一 树 定义 n n gt 0 个结点构成的有限集合 当n
  • 面试经典(16)--二叉树根节点到指定节点的路径

    题目描述 给定一棵二叉树和二叉树中一个节点 输出根节点到指定节点间的路径 10 5 12 4 7 指定节点7 那么输出路径应该是10 5 7 分析与解法 这个题目是在我做过蛮多二叉树的题目之后总结的一道题目 发现很多题目都可以抽象出来这个题
  • 二叉树层次遍历的相关应用(伪代码)

    1 层次遍历 void LevelOrder BTree t Queue Q initQueue Q EnQueue Q t while Empty Q TNode p DeQueue Q if p gt lchird EnQueue Q
  • python二叉树类定义,列表转二叉树,leetcode本地调试

    如果想用本地IDE调试leetcode上的题目 可以使用以下辅助类 二叉树类定义 Definition for a binary tree node class TreeNode def init self x self val x sel
  • 由先序中序,或后序中序,可以唯一确定二叉树;完全二叉树的顺序存储,c/c++描述

    这是课本里的 两个定理 由先序 根左右 后序 左右根 可以确定根节点是哪个 由中序 左根右 可以确定左子树和右子树的范围 所以我们也找到了二叉树的左子树和右子树的先序 或后序 和中序排列 由归纳法 可得出这个构造二叉树链表的方法 对于完全二
  • 递归算法中的时间复杂度分析

    对于一种算法的时间复杂度分析还是特别重要的 在一些非递归算法中 我们仅仅看运算次数最多的那一行代码可能执行多少次就可以 实际就是看在循环中变量的变化 但是对于递归算法中该怎么分析呢 下面介绍几种递归函数中的算法时间复杂度分析的方法 0 递推
  • 【数据结构】【王道408】——PPT截图与思维导图

    自用视频PPT截图 视频网址王道B站链接 23考研 408新增考点 并查集 红黑树 2023年408真题数据结构篇 408考纲解读 考纲变化 目录 第一章 绪论 第二章 线性表 顺序表 单链表 双链表 循环链表 静态链表 差别 第三章 栈
  • 刷题之142. 环形链表 II

    给定一个链表的头节点 head 返回链表开始入环的第一个节点 如果链表无环 则返回 null 如果链表中有某个节点 可以通过连续跟踪 next 指针再次到达 则链表中存在环 为了表示给定链表中的环 评测系统内部使用整数 pos 来表示链表尾

随机推荐

  • Android 宽高相等的adapter item内容

    使用一张网上的图 很多时候 我们需要用使用这样的排列 宽高固定 然后是中间留有一定的边距 毫无疑问 这里我们需要用到gridadapter GridView的item是正方形 而android需要适配不同尺寸的手机 所以不能写死item的高
  • HTML+CSS+JS网页设计期末课程大作业 web前端开发技术 web课程设计 网页规划与设计

    web前端开发技术期末大作业 网页规划与制造 做得不深 但是还是满足期末大作业的 分享一下 题目 此次课程设计的题目是网页规划与设计 html css js image video audio 确定每个页面将使用的页面布局技术 如结合使用C
  • 统计机器学习方法简述

    2013 01 28 09 04 分类 机器学习 序 建议阅读的同学要一点概率论和信息论的基础 参考文献的PDF版本我会尽快放在我的服务器上 我也仅仅是研一初学者 非常欢迎大家批评指正 赫尔伯特 西蒙对 学习 这个学习比较抽象 适合人 机器
  • Git使用(2)多人协作:与远程仓库之间的沟通

    简单版本连接到github等服务器 远程和本地都没有分支 1 git checkout b newbranch 新建一个newbranch 2 git push origin newbranch 3 git pull origin newb
  • 文献综述写作模板1.0

    参考视频 基础模板框架 https www bilibili com video BV1E54y1U7SM spm id from 333 337 search card all click vd source e5e46a7b9d3909
  • SpringBoot开发符合S3协议的文件存储服务

    背景 公司最近的业务大量涉及安可项目 要求避免使用第三方组件 原有开发框架支持本地文件存储 Minio 各类云存储 现在要求文件独立存储且文件服务需要自研 经调研评估后决定基于SpringBoot开发文件存储服务 使用s3协议标准 这样可以
  • 集成AI的移动自动化测试

    集成AI的 移动自动化测试 前一阵子小编看到了爱奇艺Android架构师的一篇文章 爱奇艺基于AI的移动自动化框架的设计与实践 介绍了了一种基于AI算法的自动化测试框架Aion 该框架融合了传统图像处理和深度学习方案 虽然目前该框架还未开源
  • chatgpt赋能python:Python长浮点型介绍

    Python长浮点型介绍 Python是一种强大的编程语言 通过其众多的数据类型 使开发人员可以快速开发复杂的应用程序 其中 Python长浮点型就是Python支持的一种数据类型 长浮点型是指Python可以处理的浮点数的精度可以高达25
  • ubuntu运行python程序 已杀死_一篇文章带你搞定Ubuntu中打开Pycharm总是卡顿崩溃

    由于 Ubuntu 中的汉字输入实在是太不友好了 所以装了个 搜狗输入法 好不容易把 搜狗输入法装好 本以为可以开开心心的搞代码了 然而 pycharm 一打开 就崩溃 关不掉 进程杀死还是不行 只能关机重启 本以为 pycharm 出现了
  • 半导体创业

    synosis系列 芯耀辉 芯华章 芯原 dsp 壁仞科技 主要负责人华为mobile gp ps 华为升腾的大佬是liaoheng和tujiajun Mikehong在MobileGpu oppo 哲库科技 GPU摩尔线程 NB 芯翼信息
  • Android中apk的名称被Module下相同的app_name替换时,正确的更改方式

    错误产生原因 android 中 寻找资源文件 首先会寻找本机语言下的资源文件 例如 如果手机是中文版 则会优先选择res下面values有中文资源的进行匹配 这也是导致我的app name被module下的中文app name替换的原因
  • Python:Anaconda安装&常用库(selenium,pymysql)离线安装

    因为网络限制 所以用很多库用pip安装不成功 只能采用离线安装了 方法也简单 按照下面步骤来就好了 1 Anaconda下载安装 下载地址 https www anaconda com products individual 下载后 傻瓜式
  • ES6(这是我见过写的最好的)!推荐

    文章目录 ES6总结 var let const的区别 箭头函数和function的区别 结构赋值 原型 原型链 继承 1 原型链继承 2 构造函数继承 3 组合式继承 4 class类继承 Promise async和await Gene
  • iOS 使用蓝牙耳机的mic作为输入源

    1 首先采样率的设置必须与蓝牙耳机设备的采样率相同 2 然后通过 setPreferredInput 方法从可用的输入设备的数组中选取蓝牙耳机
  • linux应用程序core dump处理

    默认编译出来的程序在出现Segmentation fault 时并没有生成core崩溃文件 可以在gcc g 编译时增加 g选项 如果仍然没有生成core文件 则可能是因为系统设置了core文件大小为0 可以通过 ulimit a 查询得知
  • 实现游戏结束时显示GameOver界面。(Unity)

    在Canvas画板里添加Text文本组件 修改名字为GameOver 修改名字是为了让我们以后更改时更容易找到对应的组件 请名字时尽量和代码一样需要见名知义 并且通过锚点修改他的位置 在位置里修改他需要显示的大小 并且在Text文本组件中修
  • python画笑脸-如何用Python画滑稽笑脸

    Linux编程 点击右侧关注 免费入门到精通 作者丨Saltwater Room https blog csdn net Saltwater Room article details 829 用turtle画滑稽 fromturtle im
  • Android ListView默认选中第一项或第N项

    大体上从查阅的资料和自己的实践一共可以分为以下几种方法 一 重写Adapter 在getView里进行自己的操作 选中 变色等等 class MyAdapter extends BaseAdapter Override public Vie
  • 垂直网络广告

    垂直网站 英文名 Vertical website 注意力集中在某些特定的领域或某种特定的需求 提供有关这个领域或需求的全部深度信息和相关服务 作为互联网的亮点 垂直网站正引起越来越多人的关注 垂直网络广告是指广告发布主体利用网络广告投放平
  • 两个二叉树的合并

    将给定两个二叉树 想象当你将它们中的一个覆盖到另一个上时 两个二叉树的一些节点便会重叠 你需要将他们合并为一个新的二叉树 合并的规则是如果两个节点重叠 那么将他们的值相加作为节点合并后的新值 否则不为 NULL 的节点将直接作为新二叉树的节