二叉树计算

#题目描述:
给出一个二叉树如下图所示:

            6/  \7    9\   /   -2 6   

请由该二叉树生成一个新的二叉树,它满足其树中的每个节点将包含原始树中的左子树和右子树的和。

           20(7-2+9+6)/      \-2       6\      /   0    0 

左子树表示该节点左侧叶子节点为根节点的一颗新树;右子树表示该节点右侧叶子节点为根节点的一颗新树

输入描述:

2行整数,第1行表示二叉树的中序遍历,第2行表示二叉树的前序遍历,以空格分割

例如:

7 -2 6 6 9
6 7 -2 9 6

输出描述:

1行整数,表示求和树的中序遍历,以空格分割

例如:

输出

-2 0 20 0 6

示例1

输入:

-3 12 6 8 9 -10 -7
8 12 -3 6 -10 9 -7

输出:

0 3 0 7 0 2 0

题解

恶心人的题目,同一个知识点,重复写几遍

源码 Java

public class CalTree {static Input input;static {input = new Input("-3 12 6 8 9 -10 -7\n" +"8 12 -3 6 -10 9 -7");input = new Input("7 -2 6 6 9\n" +"6 7 -2 9 6");}static  StringBuffer result = new StringBuffer();public static void main(String[] args) {String[] s1 = input.nextLine().split(" ");String[] s2 = input.nextLine().split(" ");int[] mid = new int[s1.length];for (int i = 0; i < s1.length; i++) {mid[i] = Integer.parseInt(s1[i]);}int[] pre = new int[s2.length];for (int i = 0; i < s2.length; i++) {pre[i] = Integer.parseInt(s2[i]);}TreeNode root = rebuild(mid, pre);merge(root);dfs(root);System.out.println(result.toString().trim());}public static void dfs(TreeNode root) {if (root == null) {return;}dfs(root.left);result.append(root.val + " ");dfs(root.right);}public static int merge(TreeNode root) {if (root == null) {return 0;}int left = merge(root.left);int right = merge(root.right);int ret = root.val + left + right;root.val =  left + right;return ret;}public static TreeNode rebuild(int[] mid, int[] pre) {if (mid.length == 1){return new TreeNode(mid[0]);}if (mid.length == 0){return null;}TreeNode root = new TreeNode(pre[0]);int index = -1;for (int i = 0; i < mid.length; i++) {if (root.val == mid[i]){index =	i;break;}}int[] leftMid = new int[index];int[] leftPre = new int[index];for (int i = 0; i < index; i++) {leftMid[i] = mid[i];leftPre[i] = pre[i+1];}root.left = rebuild(leftMid, leftPre);int len = mid.length - leftMid.length - 1;int[] rightMid = new int[len];int[] rightPre = new int[len];for (int i = index + 1, j = 0; i < mid.length; i++, j++) {rightMid[j] = mid[i];rightPre[j] = pre[i];}root.right = rebuild(rightMid, rightPre);return root;}static class TreeNode{public int val;public TreeNode left;public TreeNode right;public TreeNode(int val) {this.val = val;}}
}

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

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

相关文章

软考(中级-软件设计师)数据库篇(1101)

第6章 数据库系统基础知识 一、基本概念 1、数据库 数据库&#xff08;Database &#xff0c;DB&#xff09;是指长期存储在计算机内的、有组织的、可共享的数据集合。数据库中的数据按一定的数据模型组织、描述和存储&#xff0c;具有较小的冗余度、较高的数据独立性和扩展…

go-zero 的使用

目录 1. 生成 user api 服务 2. 生成 user rpc 服务 3. 生成 user model 模型 4. 编写 user rpc 服务 1 修改配置文件 user.yaml 2 添加 user model 依赖 3 添加用户登录逻辑 Login 5. 编写 user api 服务 1 修改配置文件user.yaml 2 添加 user rpc 依赖 3 添加用户…

基金委:目前资助率过低,危害大,应提升至30~35%,增大青年、面上项目经费

国家基金委 近日&#xff0c;国家基金委发表题为《近十年 NSF资助率和资助强度上升 对我国科学基金资助工作的启示》文章&#xff0c;文章基于近十年 NSF总体资助变化,提出对我国科学基金资助工作启示&#xff0c;阐述了国家自然基金项目资助率下降情况、危害&#xff0c;并提…

ubuntu禁止自动更新设置

背景概述 从CentOS变更到uBuntu或多或少会遇到一些坑&#xff0c;今天分享一个。 在Ubuntu系统中&#xff0c;自动更新是一个既方便又引发争议的功能。它可以帮助用户保持系统的最新状态&#xff0c;但有时也会因为自动更新而导致系统不稳定或不兼容。 Ubuntu系统的自动更新主…

NPM 包开发与优化全面指南

前言 Hey, 我是 Immerse系列文章首发于【Immerse】&#xff0c;更多内容请关注该网站转载说明&#xff1a;转载请注明原文出处及版权声明&#xff01; 1. 理解 NPM 包的结构 1.1 package.json 文件&#xff1a;包的核心 package.json文件是 NPM 包的中央配置&#xff0c;定…

学Linux的第六天

目录 账户和组管理 工作组管理 创建工作组groupadd 修改工作组groupmod 添加/删除组成员gpasswd 删除工作组groupdel 查看用户登录系统的情况 users查看当前登录系统的用户 last命令 lastlog命令 w命令 显示登录到系统的用户信息 who命令 Linux文件系统权限 文件…

来康生命科技有限公司心率监测解决方案在健身房与康养机构的应用探索

引言 随着科技的日新月异&#xff0c;智能健康服务正逐步成为现代健康管理不可或缺的一环。来康生命科技有限公司&#xff0c;凭借其在智能物联集成交互领域的自主创新能力&#xff0c;推出了一款集蓝牙物联网、蓝牙手环、数据云与管理终端于一体的心率监测解决方案。此方案专…

在 .NET 8 Web API 中实现 Entity Framework 的 Code First 方法

本次介绍分为3篇文章&#xff1a; 1&#xff1a;.Net 8 Web API CRUD 操作.Net 8 Web API CRUD 操作-CSDN博客 2&#xff1a;在 .Net 8 API 中实现 Entity Framework 的 Code First 方法https://blog.csdn.net/hefeng_aspnet/article/details/143229912 3&#xff1a;.NET …

【React】配置图标和题目

图标和题目这些基本配置都是在 public/index.html&#xff0c;直接修改 link 中的 favicon.ico 就是修改图标&#xff1b;title 标签就是题目修改。 <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8" /><link rel&…

如何使用java雪花算法在分布式环境中生成唯一ID?

引言 在现代分布式系统中,生成唯一标识符(ID)是一个常见的需求。传统的自增ID在分布式环境中会导致冲突,因此需要一种能够在分布式系统中生成全局唯一ID的算法。 雪花算法(Snowflake)就是为了解决这个问题而提出的一种高效的ID生成算法。本文将详细介绍雪花算法的原理、…

C++类和对象上

1. 类的定义 1.1 类定义格式 • class为定义类的关键字&#xff0c;Stack为类的名字&#xff0c;{}中为类的主体&#xff0c;注意类定义结束时后⾯分号不能省略。类体中内容称为类的成员&#xff1a;类中的变量称为类的属性或成员变量; 类中的函数称为类的⽅法或者成员函数。…

NineData云原生智能数据管理平台新功能发布|2024年10月版

10 月发布内容 本月发布 7 项更新&#xff0c;其中重点发布 2 项、功能优化 3 项、性能优化 1 项、其他发布 1 项。 重点发布​ 数据库 Devops - 数据生成​ NineData 支持在数据库中自动生成符合特定业务场景的随机数据&#xff0c;用于模拟实际生产环境中的数据情况&…

抗疫物资管理:SpringBoot技术革新

第六章 系统测试 软件测试它是对做完一个系统进行最后的一项工作&#xff0c;因为我们在做系统的时候&#xff0c;在进行编码以后可以开始对软件进行测试&#xff0c;在测试当中我们可以找出这个软件的错误与缺陷&#xff0c;这样我们可以及时处理&#xff0c;不影响后期正常的…

【Rust中的错误处理】

Rust中的错误处理 什么是错误处理Rust中的错误处理比Result<T,E>更强硬的panic&#xff01;比单独调用panic更丝滑的unwrap&#xff0c;expect&#xff1a;总结 什么是错误处理 ‌错误处理‌是指在编程过程中&#xff0c;对程序运行时出现的错误进行检测、捕获和处理的过…

BGP路径属性与路由反射器

前言 IBGP水平分割规则用于防止AS内部产生环路&#xff0c;在很大程度上杜绝了IBGP路由产生环路的可能性&#xff0c;但是同时也带来了新的问题&#xff1a;BGP路由在AS内部只能传递一跳&#xff0c;如果建立IBGP对等体全互联模型又会加重设备的负担。 BGP 路径属性 AS_Path …

医学和生信web APP 平台- Appmatrix

医学&#xff08;和生信&#xff09;web APP 平台- Appmatrix 最近使用shinyproxy将平时所构建的shiny和streamlit医学类应用汇集在一起&#xff0c;实现一站式访问&#xff0c;另外&#xff0c;使用了自己电脑内网穿透&#xff0c;一定程度上缓解了数据分析类APP消耗计算资源…

Rust 力扣 - 1456. 定长子串中元音的最大数目

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 我们遍历长度为k的窗口&#xff0c;我们只需要记录窗口内的元音字母数量即可&#xff0c;遍历过程中刷新最大数目 题解代码 impl Solution {pub fn max_vowels(s: String, k: i32) -> i32 {let s s.as_byt…

Centos系统新增网卡后获取不到网卡的IP地址解决方法

一、问题描述 当我们给Centos系统添加了新的网卡后,使用查看IP地址命令【ip addr】时,发现新网卡没有获取到对应的IP地址信息,如下图所示: 二、解决方法 有两种解决方法:一种是自动获取IP地址;另外一种是手动配置IP地址; 2.1、自动获取IP地址 #自动获取网卡的IP地址命…

跨境卖家必备!好用的独立站建站工具推荐 !

对于跨境卖家来说&#xff0c;拥有一个独立站是拓展海外市场、提升品牌影响力的重要途径。而选择一款好用的独立站建站工具&#xff0c;则是成功搭建独立站的关键。 一、为什么跨境卖家需要独立站&#xff1f; 在跨境电商领域&#xff0c;独立站具有诸多优势。首先&#xff0c…

Android和iOS有什么区别?

Android 和 iOS 有以下区别&#xff1a; 开发者与所属公司&#xff1a; Android&#xff1a;由谷歌公司开发以及开放手机联盟维护。它是基于 Linux 内核和其他开源软件的修改版本&#xff0c;代码开源程度较高&#xff0c;许多厂商都可以基于 Android 源代码进行深度定制和开发…