SCAU--平衡树

3  平衡树

Time Limit:1000MS  Memory Limit:65535K

题型: 编程题   语言: G++;GCC;VC;JAVA;PYTHON

描述

平衡树并不是平衡二叉排序树。
这里的平衡指的是左右子树的权值和差距尽可能的小。
给出n个结点二叉树的中序序列w[1],w[2],…,w[n],请构造平衡树,并给出平衡树的先序序列。
平衡树构造算法如下:
(1)假设平衡树树根为序列中元素i,i左侧所有元素权值和S1=w[1]+w[2]+...+w[i-1],
其右侧所有元素权值和S2=w[i+1]+w[i+2]+...w[n]。在选择树根i时要求让S1-S2的绝对值最小。
例如5个元素序列 {5 4 1 2 3},选择4为树根是最合适的,此时左侧权值和5,右侧权值和6,差值绝对值最小。
如选择其他结点为根,左右两侧权值和的差值绝对值会更大。
(2)选定树根i之后,对序列w[1],w[2],...,w[i-1]和w[i+1],w[i+2],...,w[n]分别构造平衡树,
作为树根i的左右子树。

 5个元素序列 {5 4 1 2 3}的平衡树如上图,其先序序列为4 5 2 1 3。

输入格式

第一行一个整数n;
第二行n个正整数表示二叉树的中序序列。

输出格式

n个整数,平衡树的先序序列。
注意:如果选取树根时有两个结点,他们左右两侧权值和的差值绝对值相同,且均为最小值,
我们要求选择编号更小的结点。例如序列(7,6,2,9),选取6或2做树根时,两侧权值和的差值绝对值均为4,
此时要求选择6作为树根。

输入样例

4
7 6 2 9

输出样例

6 7 9 2
#include <iostream>
#include <stack>
#include <algorithm>
#include <vector>
#include <set>
#include <string>
using namespace std;
typedef long long ll; // 定义long long类型别名llint n; // 节点数量
vector<ll> w; // 存储中序序列的权值,索引从1到n
vector<ll> p; // 前缀和数组,p[i]表示w[1]到w[i]的和
vector<int> pre; // 存储先序遍历结果的节点索引// 递归构建平衡树的函数
// 参数:
//   l: 当前子树在中序序列中的左边界
//   r: 当前子树在中序序列中的右边界
void build(int l, int r) {if (l > r) return; // 递归终止条件:左边界超过右边界ll minDiff = 10000000; // 初始化最小差值为一个大数int rootIndex = l; // 初始化根节点索引为左边界// 遍历当前子树的每个可能作为根节点的位置for (int i = l; i <= r; i++) {// 计算左子树的权值和:p[i-1] - p[l-1]ll leftSum = p[i - 1] - p[l - 1];// 计算右子树的权值和:p[r] - p[i]ll rightSum = p[r] - p[i];// 计算左右子树权值和的差的绝对值ll diff = abs(leftSum - rightSum);// 如果找到更小的差值,更新最小差值和根节点索引if (diff < minDiff) {minDiff = diff;rootIndex = i;}// 注意:题目要求当差值相同时选择编号较小的节点// 由于i是从左到右遍历的,所以自动满足这个条件}// 将当前根节点的索引加入先序序列pre.push_back(rootIndex);// 递归构建左子树build(l, rootIndex - 1);// 递归构建右子树build(rootIndex + 1, r);
}int main() {// 优化输入输出ios::sync_with_stdio(false);cin.tie(nullptr);cin >> n; // 读取节点数量w.resize(n + 1); // 调整w的大小为n+1(索引1到n)p.resize(n + 1, 0); // 调整p的大小为n+1,并初始化为0// 读取权值并计算前缀和for (int i = 1; i <= n; i++) {cin >> w[i];p[i] = p[i - 1] + w[i]; // p[i] = w[1] + w[2] + ... + w[i]}// 从整个序列构建平衡树build(1, n);// 输出先序遍历结果(输出的是节点的权值,不是索引)for (int i = 0; i < pre.size(); i++) {cout << w[pre[i]] << ' ';}cout << endl;return 0;
}

 

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

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

相关文章

Docker容器镜像与容器常用操作指南

一、镜像基础操作 搜索镜像 docker search <镜像名>在Docker Hub中查找公开镜像&#xff0c;例如&#xff1a; docker search nginx拉取镜像 docker pull <镜像名>:<标签>从仓库拉取镜像到本地&#xff0c;标签默认为latest&#xff1a; docker pull nginx:a…

TDengine 更多安全策略

简介 上一节我们介绍了 TDengine 安全部署配置建议&#xff0c;除了传统的这些配置外&#xff0c;TDengine 还有其他的安全策略&#xff0c;例如 IP 白名单、审计日志、数据加密等&#xff0c;这些都是 TDengine Enterprise 特有功能&#xff0c;其中白名单功能在 3.2.0.0 版本…

小白入门:GitHub 远程仓库使用全攻略

一、Git 核心概念 1. 三个工作区域 工作区&#xff08;Working Directory&#xff09;&#xff1a;实际编辑文件的地方。 暂存区&#xff08;Staging Area&#xff09;&#xff1a;准备提交的文件集合&#xff08;使用git add操作&#xff09;。 本地仓库&#xff08;Local…

[创业之路-370]:企业战略管理案例分析-10-战略制定-差距分析的案例之小米

战略制定-差距分析的案例之小米 在战略制定过程中&#xff0c;小米通过差距分析明确自身与市场机会之间的差距&#xff0c;并制定针对性战略&#xff0c;实现快速发展。以下以小米在智能手机市场的机会差距分析为例&#xff0c;说明其战略制定过程。 一、市场机会识别与差距分…

Index-AniSora模型论文速读:基于人工反馈的动漫视频生成

Aligning Anime Video Generation with Human Feedback 一、引言 论文开头指出&#xff0c;尽管视频生成模型不断涌现&#xff0c;但动漫视频生成面临动漫数据稀缺和运动模式异常的挑战&#xff0c;导致生成视频存在运动失真和闪烁伪影等问题&#xff0c;难以满足人类偏好。现…

第 4 章:网络与总线——CAN / Ethernet / USB-OTG

本章目标: 深入理解三种关键通信总线(CAN、Ethernet、USB-OTG)的协议架构、硬件接口与软件驱动 掌握 STM32(或同类 MCU)中各总线的寄存器配置、中断/DMA 驱动框架 通过实战案例,实现基于 CAN 总线的节点通信、基于 Ethernet 的 TCP/IP 通信,以及基于 USB-OTG 的虚拟串口…

数据结构-DAY05

一、栈的概念 1.栈是限定仅在表尾进行插入和删除操作的线性表。先进后出、后进先出 栈顶:允许操作的一端 栈底:不允许操作的一端入栈&#xff0c;出栈。 栈分为&#xff1a;顺序栈 链式栈 2.栈结构是在堆区创建的 3.优先级就是通过栈来解决的 先进后出…

leetcode 153. Find Minimum in Rotated Sorted Array

题目描述 分析 可以发现一个规律&#xff1a; 假如整个数组最后一个元素是x。 最小值左侧&#xff08;不含最小值自己&#xff09;的元素全部大于x。 最小值右侧&#xff08;包含最小值自己&#xff0c;不包含x&#xff09;的元素全部小于x。 如果整个数组是有序的&#x…

如何在 AOSP 中判断一个源文件属于哪个模块(以 CameraService 为例)

如何在 AOSP 中判断一个源文件属于哪个模块&#xff08;以 CameraService 为例&#xff09; 在 AOSP 开发中&#xff0c;经常需要修改底层 C 代码&#xff08;如 CameraService.cpp&#xff09;&#xff0c;但很多人会遇到一个问题&#xff1a; 我修改了某个 .cpp 文件&#x…

云原生主要架构模式

云原生(Cloud Native)是一种利用云计算的优势来构建和运行可扩展、弹性和高效应用程序的方法。它不仅仅是技术的集合,更是一种架构和设计理念。本文将围绕你提出的几部分,深入探讨云原生主要的架构模式,帮助你理解如何利用这些模式构建现代化的应用。 1. 服务化架构模式(…

深入理解MySQL结构与执行流程

标题&#xff1a;深入理解MySQL结构与执行流程 MySQL以其开源、灵活性和强大的功能成为了最受欢迎的关系型数据库管理系统之一。无论是初创公司还是大型企业&#xff0c;都广泛使用MySQL来存储和管理数据。为了帮助大家更好地理解和优化MySQL的性能&#xff0c;本文将详细讲解…

Python web 开发 Flask HTTP 服务

Flask 是一个轻量级的 Web 应用框架&#xff0c;它基于 Python 编写&#xff0c;特别适合构建简单的 Web 应用和 RESTful API。Flask 的设计理念是提供尽可能少的约定和配置&#xff0c;从而让开发者能够灵活地构建自己的 Web 应用。 https://andi.cn/page/622189.html

BMVC2023 | 多样化高层特征以提升对抗迁移性

Diversifying the High-level Features for better Adversarial Transferability 摘要-Abstract引言-Introduction相关工作-Related Work方法-Methodology实验-Experiments结论-Conclusion 论文链接 GitHub链接 本文 “Diversifying the High-level Features for better Adve…

虚幻引擎5-Unreal Engine笔记之摄像头camera

虚幻引擎5-Unreal Engine笔记之摄像头camera code review! 目录 第一部分&#xff1a;摄像头的基础概念 1.1 UE5 中摄像头的定义与作用1.2 UE5 中摄像头的类型与分类 第二部分&#xff1a;摄像头的代码结构与分类 2.1 摄像头是类还是组件&#xff1f;2.2 组件的本质&#xff…

【大数据】MapReduce 编程-- PageRank--网页排名算法,用于衡量网页“重要性”-排序网页

PageRank 是 Google 创始人拉里佩奇&#xff08;Larry Page&#xff09;和谢尔盖布林&#xff08;Sergey Brin&#xff09;在 1998 年提出的一种网页排名算法&#xff0c;用于衡量网页“重要性”的一种方式。它是搜索引擎中用于排序网页的一种基础算法 一个网页越是被其他重要…

React Flow 数据持久化:Django 后端存储与加载的最佳实践(含详细代码解析)

在构建 React Flow 应用时&#xff0c;前端呈现的节点与连线构成的可视化流程只是冰山一角&#xff0c;其背后的数据持久化与灵活调取才是确保应用稳定运行、支持用户数据回溯与协作的关键。因此&#xff0c;后端存储与加载 React Flow 信息的环节&#xff0c;就如同整个应用的…

深度学习中的归一化:提升模型性能的关键因素

&#x1f4cc; 友情提示&#xff1a; 本文内容由银河易创AI&#xff08;https://ai.eaigx.com&#xff09;创作平台的gpt-4-turbo模型辅助完成&#xff0c;旨在提供技术参考与灵感启发。文中观点或代码示例需结合实际情况验证&#xff0c;建议读者通过官方文档或实践进一步确认…

Pandas:Series和DataFrame的概念、常用属性和方法

本文目录&#xff1a; 一、Series和Dataframe的概念二、创建Series对象三、创建Dataframe对象&#xff08;一&#xff09;Series1.Series的常用属性总结如下&#xff1a;2.Series的常用方法总结如下&#xff1a; &#xff08;二&#xff09;Dataframe1.Dataframe的常用属性2.Da…

数据中心Overlay解决方案

文档围绕数据中心 Overlay 解决方案展开,指出数据中心向大集中、虚拟化、云业务演进,传统架构存在网络规划复杂、弹性不足、业务扩展受限等问题。Overlay 网络在物理网络上构建虚拟网络,实现名址分离、网络与物理解耦,支持业务灵活部署。方案采用VXLAN 技术(如 SDN 控制模…

SpringBoot 项目实现操作日志的记录(使用 AOP 注解模式)

本文是博主在做关于如何记录用户操作日志时做的记录&#xff0c;常见的项目中难免存在一些需要记录重要日志的部分&#xff0c;例如权限和角色设定&#xff0c;重要数据的操作等部分。 博主使用 Spring 中的 AOP 功能&#xff0c;结合注解的方式&#xff0c;对用户操作过的一些…