华为OD机试 - 按照路径替换二叉树(Java 2024 C卷 200分)

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
      • 1、输入
      • 2、输出
    • 四、解题思路
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出
      • 3、说明

华为OD机试 2024C卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷+C卷)》。

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

将一棵二叉树按照路径替换到另一棵二叉树中,得到一棵新的二叉树。替换动作满足如下条件:

  1. 子树的根节点完全替换根二叉树对应的节点
  2. 子树根节点下的子树完全保留
  3. 根二叉树的对应节点下的子树完全删除

二、输入描述

输入为三行

第一行:一个数组,表示根二叉树。二叉树的每个节点在1到9之间,包含1和9,空节点用0表示。

第二行:一个字符串,表示子二叉树根节点对应根二叉树的节点。如“/1/2”对应(每个节点不存在相同的子节点,即path对应的子树最多只有一个)。

第三行:一个数组表示子二叉树。二叉树的每个节点在1到9之间,包含1和9,空节点用0表示。

三、输出描述

一个数组,表示一个二叉树,逐层从左到右描述,为空的节点忽略(与输入不同)。

1、输入

[1,1,2,0,0,4,5]
/1/2
[5,3,0]

2、输出

[1,1,5,3]

四、解题思路

  1. 将每行的输入放入根二叉树数组arr1、子二叉树根节点对应根二叉树的节点数组arr2、子二叉树数组arr3;
  2. 根二叉树建树、子二叉树建树;
  3. 子二叉树根节点对应根二叉树的节点,进行子树替换;
  4. 如果子二叉树根节点对应根二叉树的节点只有1个,则完全替换,否则通过回溯替换子树;
  5. 遍历输出结果。

五、Java算法源码

public class Test02 {/*** [1,1,2,0,0,4,5]* /1/2* [5,3,0]*/public static void main(String[] args) {Scanner sc = new Scanner(System.in);// 根二叉树String input1 = sc.nextLine();String[] inputArr1 = input1.substring(1, input1.length() - 1).split(",");// 根二叉树数组int[] arr1 = new int[inputArr1.length];for (int i = 0; i < inputArr1.length; i++) {arr1[i] = Integer.parseInt(inputArr1[i]);}// 子二叉树根节点对应根二叉树的节点 /1/2String input2 = sc.nextLine();String[] inputArr2 = input2.substring(1, input2.length()).split("/");int[] arr2 = new int[inputArr2.length];for (int i = 0; i < inputArr2.length; i++) {arr2[i] = Integer.parseInt(inputArr2[i]);}// 子二叉树String input3 = sc.nextLine();String[] inputArr3 = input3.substring(1, input3.length() - 1).split(",");// 子二叉树数组int[] arr3 = new int[inputArr3.length];for (int i = 0; i < inputArr3.length; i++) {arr3[i] = Integer.parseInt(inputArr3[i]);}// 根二叉树建树TreeNode treeNode1 = buildTree(arr1, 0);// 子二叉树建树TreeNode treeNode3 = buildTree(arr3, 0);// 子二叉树根节点对应根二叉树的节点,进行子树替换if (arr2.length > 1) {// 替换子树dfs(treeNode1, treeNode3, arr2, 1);} else {// 如果子二叉树根节点对应根二叉树的节点只有1个,则完全替换treeNode1 = treeNode3;}// 遍历输出结果Queue<TreeNode> queue = new LinkedList<>();queue.add(treeNode1);String result = "[";while (!queue.isEmpty()) {TreeNode node = queue.poll();result = result + node.val + ",";if (node.left != null) {queue.add(node.left);}if (node.right != null) {queue.add(node.right);}}result = result.substring(0, result.length() - 1) + "]";System.out.println(result);}// 建树public static TreeNode buildTree(int[] nums, int index) {TreeNode newNode = null;if (index < nums.length) {// 0表示空节点,如果不是空节点,则构建树if (nums[index] != 0) {// 根节点newNode = new TreeNode(nums[index]);newNode.left = buildTree(nums, 2 * index + 1);newNode.right = buildTree(nums, 2 * index + 2);}}return newNode;}/*** 替换子树* @param treeNode1 根二叉树* @param treeNode3 子二叉树* @param arr2 子二叉树根节点对应根二叉树的节点* @param i*/public static void dfs(TreeNode treeNode1, TreeNode treeNode3, int[] arr2, int i) {// 替換到最后一位,终止替换if (i == arr2.length - 1) {if (treeNode1.left != null && treeNode1.left.val == arr2[i]) {treeNode1.left = treeNode3;return;} else if (treeNode1.right != null && treeNode1.right.val == arr2[i]) {treeNode1.right = treeNode3;return;}}// 替换子树if (treeNode1.left != null && treeNode1.left.val == arr2[i]) {dfs(treeNode1.left, treeNode3, arr2, i + 1);} else if (treeNode1.right != null && treeNode1.right.val == arr2[i]) {dfs(treeNode1.right, treeNode3, arr2, i + 1);}}/*** 二叉樹*/public static class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int val) {this.val = val;}}
}

六、效果展示

1、输入

[1,1,2,0,0,4,5]
/1/2
[5,3,0]

2、输出

[1,1,5,3]

3、说明

在这里插入图片描述


🏆下一篇:华为OD机试 - 简易内存池 - 逻辑分析(Java 2024 C卷 200分)

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷+C卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

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

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

相关文章

FreeRTOS教程10 低功耗

目录 1、准备材料 2、学习目标 3、前提知识 3.1、HAL 库基础时钟 3.1.1、使用 SysTick 定时器 3.1.1.1、工作原理 3.1.1.2、中断处理 3.1.2、使用其他定时器 3.1.2.1、工作原理 3.1.2.2、中断处理 3.2、FreeRTOS 基础时钟 3.2.1、工作原理 3.2.2、中断处理 3.3、…

基于SpringBoot精品在线试题库系统

采用技术 基于SpringBoot精品在线试题库系统的设计与实现~ 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBootMyBatis 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 页面展示效果 系统功能结构图 学生管理 教师管理 专业管理 试卷管理 …

美食杂志制作秘籍:引领潮流,引领味蕾

美食杂志是一种介绍美食文化、烹饪技巧和美食体验的杂志&#xff0c;通过精美的图片和生动的文字&#xff0c;向读者展示各种美食的魅力。那么&#xff0c;如何制作一本既美观又实用的美食杂志呢&#xff1f; 首先&#xff0c;你需要选择一款适合你的制作软件。比如FLBOOK在线制…

VUE+Vant实现H5组织架构选人选公司组件

提醒自己&#xff1a; 这是之前的逻辑&#xff0c;或许你重新写会有更好的方法&#xff0c;可以参考逻辑&#xff01;&#xff01;&#xff01; 功能介绍 1.有面包屑点击切换 2.有公司、部门、人员 3.单选、多选实现 4.编辑/回显 5.使用随意切换层级和跳转到指定层级回显等功…

设计编程网站集:生活部分:饮食+农业,植物(暂记)

这里写目录标题 植物相关综合教程**大型植物&#xff1a;****高大乔木&#xff08;Trees&#xff09;&#xff1a;** 具有坚硬的木质茎&#xff0c;通常高度超过6米。例如&#xff0c;橡树、松树、榉树等。松树梧桐 **灌木&#xff08;Shrubs&#xff09;&#xff1a;** 比乔木…

html5cssjs代码 032 边框属性示例

html5&css&js代码 032 边框属性示例 一、代码二、解释 该HTML文件定义了一个网页页面&#xff0c;主要介绍了HTML5中CSS边框属性的用法。 一、代码 <!DOCTYPE html> <html lang"zh-cn"><head><title>编程笔记 html5&css&j…

mybatis-flex入门体验(一)

shigen坚持更新文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 个人IP&#xff1a;shigen 趁着下午的空闲时间&#xff0c;研究了一下mybatis-flex&#xff0c;看着对我还…

权限提升-Web权限提升篇划分获取资产服务后台系统数据库管理相互转移

知识点 1、权限提升转移-分类&高低&场景 2、Web权限提升及转移-后台&数据库 3、后台权限及转移-转移对象&后台分类 章节点&#xff1a; 1、Web权限提升及转移 2、系统权限提升及转移 3、宿主权限提升及转移 4、域控权限提升及转移 基础点 0、为什么我们要学…

2024.3.21div4晚训题解

晚训地址链接VJ地址点击即可传送 A题 相当简单的条件判断题 #include<bits/stdc.h> using namespace std; int main(){int t;cin>>t;while(t--){int x;cin>>x;cout<<"Division ";if(x>1900)cout<<1;else if(x>1600)cout<&l…

使用 Vite 和 Bun 构建前端

虽然 Vite 目前可以与 Bun 配合使用&#xff0c;但它尚未进行大量优化&#xff0c;也未调整以使用 Bun 的打包器、模块解析器或转译器。 Vite 可以与 Bun 完美兼容。从 Vite 的模板开始使用吧。 bun create vite my-app ✔ Select a framework: › React ✔ Select a variant:…

【Docker】Docker官方发布26.0.0社区版

官网下载地址&#xff08;For RHEL/CentOS 7.5&#xff09;&#xff1a; https://download.docker.com/linux/centos/7/x86_64/stable/Packages/ 本次官方更新的rpm包有 7 个&#xff0c;文件名如下&#xff1a; # ls -ltr 总用量 118588 -rw-r--r--. 1 root root 28398448 3…

excel所有知识点

1要加双引号 工作表&#xff08;.xlsx) 单击右键→插入&#xff0c;删除&#xff0c;移动、重命名、复制、设置标签颜色&#xff0c;选定全部工作表 工作表的移动&#xff1a;两个表打开→右键→移动&#xff08;如果右键是灰色的&#xff0c;可能是保护工作表了&#xff09…

YOLOv9有效改进|使用iRMB与RepNCSPELAN4融合

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;助力高效涨点&#xff01;&#xff01;&#xff01; 一、改进点介绍 iRMB是CVPR2023即插即用的到残差注意力机制。 本文使用iRMB与RepNCSPELAN4进行融合 二、iRMB-RepNCSPELAN4模块详解 2.1 模块简介 这…

Flutter 运行 flutter doctor 命令长时间未响应

由于 Flutter 运行 flutter doctor 命令&#xff0c;会从 pub(https://pub.dev/ 类似于 Node.js 的 npm) 上进行资源的下载&#xff0c;如果没有配置国内镜像&#xff0c;可能会由于其服务器在国外导致资源下载慢或者下载不下来&#xff0c;所以出现了运行 flutter doctor 命令…

【单元测试】单元测试之Mockito的使用

目录 一、前期准备1、准备工作2、入门知识3、五分钟入门Demo 二、让我们开始学习吧&#xff01;1、行为验证2、如何做一些测试桩stub3、参数匹配器4、执行顺序验证5、确保交互&#xff08;interaction&#xff09;操作不会执行在mock对象上6、使用注解简化mock对象创建7、监控真…

【C语言基础】:字符串函数(二)

文章目录 一、strncpy函数的使用二、strncat函数的使用三、strncmp函数的使用四、strstr函数的使用和模拟实现4.1 strstr函数的使用4.2 strstr函数的模拟实现 五、strtok函数的使用六、strerror函数的使用 上节回顾&#xff1a;【C语言基础】&#xff1a;字符函数和字符串函数 …

软考高级:软件架构评估-质量属性-安全性概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

子矩阵(十四届蓝桥杯python组A)

这题思路就是用两次单调队列。 下面是TIE的代码。9/10&#xff1b;用了priority_queue做单调队列&#xff0c;而不是手动写的。 &#xff08;手写单调队列好麻烦~~~&#xff0c;脑子晕死&#xff0c;考试的时候过了9个点也ok&#xff0c;&#xff09; #include<iostream&…

精确率(召回率)的权衡(Machine Learning研习十六)

精确率&#xff08;召回率&#xff09;的权衡 为了理解这种权衡&#xff0c;让我们看看 SGDClassifier如何做出分类决策。 对于每个实例&#xff0c;它根据决策函数计算分数。 如果该分数大于阈值&#xff0c;则将该实例分配给正类&#xff1b; 否则它会将其分配给负类。 图 3…

独孤思维:伪造收益图,进行副业收割

01 早年独孤混群。 刚开始只会发自己的副业项目资料。 资料里面全是钩子。 所以被群主踢了。 刚开始很生气&#xff0c;后来发现自己的社群也有人打广告。 才慢慢理解那种感受。 随后混的群&#xff0c;都是以价值分享和副业心得为主。 给社群的其他小伙伴&#xff0c;…