【树】-Lc617-合并二叉树(同时递归2棵树)

写在前面

  最近想复习一下数据结构与算法相关的内容,找一些题来做一做。如有更好思路,欢迎指正。


目录

  • 写在前面
  • 一、场景描述
  • 二、具体步骤
    • 1.环境说明
    • 2.代码
  • 写在后面


一、场景描述

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

示例 1:
输入:Tree 1                     Tree 21                         2/ \                       / \3   2                     1   3/                           \   \5                             4   7输出:
合并后的树:3/ \4   5/ \   \5   4   7

二、具体步骤

1.环境说明

名称说明
IntelliJ IDEA2019.2

2.代码

以下为Java版本实现:

public class Lc617_MergeTrees {public static void main(String[] args) {// t1TreeNode t1n5 = new TreeNode(5);TreeNode t1n2 = new TreeNode(2);TreeNode t1n3 = new TreeNode(3);t1n3.left = t1n5;TreeNode t1 = new TreeNode(1);t1.left = t1n3;t1.right = t1n2;// t2TreeNode t2n7 = new TreeNode(7);TreeNode t2n3 = new TreeNode(3);t2n3.right = t2n7;TreeNode t2n4 = new TreeNode(4);TreeNode t2n1 = new TreeNode(1);t2n1.right = t2n4;TreeNode t2 = new TreeNode(2);t2.left = t2n1;t2.right = t2n3;System.out.println(Helper.levelOrder(mergeTrees(t1, t2)));}/*** 思路:* 返回值是TreeNode* 合并2个二叉树, 将t2覆盖到t1上,直接返回t1** 递归 2 棵树,处理2个结点* 结束条件:至少一个为空,则用另一个结点来返回(覆盖),即 if t1 == null return t2, if t2 == null return t1** 否则2个节点都不为空,直接累加 t1.val += t2.val** 分别递归处理左子树和右子树*      t1.left  = (t1.left, t2.left)*      t1.right = (t1.right, t2.right)** @param t1* @param t2* @return*/private static TreeNode mergeTrees(TreeNode t1, TreeNode t2) {// 为空覆盖操作if (t1 == null) {return t2;}if (t2 == null) {return t1;}t1.val += t2.val;// 递归处理左右子树t1.left = mergeTrees(t1.left, t2.left);t1.right = mergeTrees(t1.right, t2.right);return t1;}static class Helper {private static List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> result = new ArrayList<>();if (root == null) {return result;}// LinkedList也是一个队列Queue<TreeNode> queue = new LinkedList<>();queue.offer(root);while (!queue.isEmpty()) {// size控制一层结点的个数int size = queue.size();List<Integer> list = new ArrayList<>();while (size-- > 0) {TreeNode node = queue.poll();list.add(node.val);if (node.left != null) {queue.offer(node.left);}if (node.right != null) {queue.offer(node.right);}}result.add(list);}return result;}}static class TreeNode {int val;TreeNode left;TreeNode right;public TreeNode(int val) {this.val = val;}}
}

写在后面

  如果本文内容对您有价值或者有启发的话,欢迎点赞、关注、评论和转发。您的反馈和陪伴将促进我们共同进步和成长。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/729677.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3•8向女同胞致敬|营销枢纽SaaS厂商乐通达(ltd.com)正式更名枢纽云

为了向女同胞致敬&#xff0c;我们特地选择3月8日女神节变更公司名称&#xff0c;因为《如果SaaS有性别&#xff0c;那 TA一定是女性 》。 2024年3月8日&#xff0c;“杭州乐通达网络有限公司”名称正式变更为“杭州枢纽云计算有限公司”&#xff08;简称&#xff1a;营销枢纽&…

Vue教学18:Element UI进阶组件探索,提升Vue应用的专业性

大家好,欢迎回到我们的Vue教学系列博客!在前十七篇博客中,我们学习了Vue.js的基础知识、安装Node.js与npm、使用Vue Devtools进行调试、Vue实例与生命周期钩子、数据绑定(单向与双向)、计算属性与侦听器、条件渲染和列表渲染、事件处理、组件之间的传值(props和$emit)、…

测试常用的Linux命令

前言 直接操作硬件 将把操作硬件的代码封装成系统调用&#xff0c;供程序员使用 虚拟机软件 可以模拟的具有完整硬件系统的功能 可以在虚拟机上安装不同的操作系统 Linux内核只有一个&#xff0c;发行版有很多种 内核来运行程序和管理像磁盘和打印机等硬件设备的核心程序 终端…

积鼎科技两款国产流体仿真软件入选《上海市工业软件推广目录》!

为落实《上海市促进工业软件高质量发展行动计划(2021-2023年)》&#xff0c;聚焦重点行业和领域痛点问题&#xff0c;提升关键软件技术创新和供给能力&#xff0c;推动工业软件产品应用和产业生态建设更好支撑全市制造业数字化转型&#xff0c;《2023年上海市工业软件推荐目录》…

YOLOv8改进 | 独家创新篇 | 利用DCNv3集合DLKA形成全新的注意力机制(全网独家创新)

一、本文介绍 本文给大家带来的机制是由我独家创新结合Deformable Large Kernel Attention (D-LKA) 注意力机制和DCNv3可变形卷积的全新注意力机制模块(算是二次创新),D-LKA的基本原理是结合了大卷积核和可变形卷积的注意力机制,通过采用大卷积核来模拟类似自我关注的感受…

ERP物资采购策略解决方案

ERP物资采购策略解决方案 企业在不断探索物资采购的最优管理模式中&#xff0c;针对采购性质、对象、价值等方面&#xff0c;其使用的策略是不同的。如何最大限度地满足企业的各种需要是对ERP软件适应性提出的挑战。 一、 物资采购的对象 首先我们要明确企业物…

Python中排序函数sorted的用法

Python中排序函数sorted的用法 列表对象提供了sort()方法支持原地排序&#xff0c;而内置函数sorted()返回新列表&#xff0c;并不对原列表进行任何修改。 sorted()方法可以对列表、元组、字典、range对象等进行排序。 列表的sort()方法和内置函数sorted()都支持key参数实现复…

Linux安全--为Nginx加上PHP解析功能

yum install php-fpm -y安装php进程管理器 找到Nginx安装的路径 编辑Nginx配置文件

数学建模【主成分分析】

一、主成分分析简介 主成分分析&#xff08;Principal Component Analysis&#xff0c;PCA&#xff09;是一种降维算法&#xff0c;它能将多个指标转换为少数几个主成分&#xff0c;这些主成分是原始变量的线性组合&#xff0c;且彼此之间互不相关&#xff0c;其能反映出原始数…

【element-ui】el-table表格高亮选中

highlight-current-row 是否要高亮当前行 <el-tableref"singleTable"highlight-current-rowcurrent-change"handleCurrentChange"></el-table>修改高亮行的颜色 .current-row {background-color: pink; }由current-change事件来管理选中时触发…

基于springboot的家庭装修报价系统设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 相关技术 3 1.1 SpringBoot框架 3 1.2 ECharts 3 1.3 Vue框架 3 1.4 Bootstrap框架 3 1.5 JQuery技术 4 1.6 Ajax技术 4 1.7 本章小结 4 2 系统分析 5 2.1 需求分析 5 2.2 非功能需求 7 2.3 本章小结 8 3 系统设计 9 3.1 系统总体设计 9 …

【能力素质模型建立】某大型国有能源公司能力素质模型项目纪实

【客户评价】 我们之前挑选过很多家做管理咨询的企业&#xff0c;经过多家企业的竞标&#xff0c;我们最终选择了北京华恒智信人力资源顾问有限公司&#xff0c;因为在竞标中我们看到了贵公司的专业性和敬业精神。 在项目合作中&#xff0c;贵公司的多位咨询老师也表现出了高…

快速使用transformers的pipeline实现各种深度学习任务

目录 引言 安装 情感分析 文本生成 文本摘要 图片分类 实例分割 目标检测 音频分类 自动语音识别 视觉问答 文档问题回答 图文描述 引言 在这篇中文博客中,我们将深入探讨使用transformers库中的pipeline()函数,它为预训练模型提供了一个简单且快速的推理方法。…

frida:hook所有方法

标题&#xff1a;frida&#xff1a;hook所有方法 在Android逆向工程中&#xff0c;Frida是一个强大的动态代码插桩工具&#xff0c;能够帮助我们实时hook和调试目标应用的方法。本文将通过一个实际案例&#xff0c;探讨在使用Frida Hook测试应用中的Utils类时遇到的一个JavaSc…

LeetCode100 刷题记录

文章目录 矩阵相关1. 旋转矩阵2. 搜索二维矩阵 矩阵相关 1. 旋转矩阵 题目描述&#xff1a; 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵…

Android JNI复杂用法,回调,C++中调用Java方法

Android JNI复杂用法&#xff0c;回调&#xff0c;C中调用Java方法 一、前言 Android JNI的 普通用法估计很多人都会&#xff0c;但是C中调用Java方法很多人不熟悉&#xff0c;并且网上很多介绍都是片段的。 虽然C/C调用Java不常用&#xff0c;但是掌握多一点还是有好处的。…

【C++杂货铺】详解string

目录 &#x1f308;前言&#x1f308; &#x1f4c1; 为什么学习string &#x1f4c1; 认识string&#xff08;了解&#xff09; &#x1f4c1; string的常用接口 &#x1f4c2; 构造函数 &#x1f4c2; string类对象的容量操作 &#x1f4c2; string类对象的访问以及遍历操…

js判断页面是否是在iframe里面

文章目录 一、前言1.1、_blank跳转1.2、_self跳转 二、方法2.1、判断子项目是否是在iframe内部2.2、实现_self跳转 三、最后 一、前言 上面是父前端项目里的iframe加载了子前端项目的页面。此时如果点击子项目的内容&#xff0c;如果要进行父项目浏览器页面跳转&#xff0c;可以…

C++初阶 类(上)

目录 1. 什么是类 2. 如何定义出一个类 3. 类的访问限定符 4. 类的作用域 5. 类的实例化 6. 类的大小 7. this指针 1.this指针的引出 2. this指针的特性 8. 面试题 1. 什么是类 在C语言中&#xff0c;不同类型的数据集合体是结构体。为了方便管理结构体&#xff0c;我…

HarmonyOS NEXT应用开发案例——自定义TabBar

介绍 本示例主要介绍了TabBar中间页面如何实现有一圈圆弧外轮廓以及TabBar页签被点击之后会改变图标显示&#xff0c;并有一小段动画效果。 效果图预览 使用说明&#xff1a; 依次点击tabBar页面&#xff0c;除了社区图标之外&#xff0c;其它图标往上移动一小段距离。 实现…