2673. 使二叉树所有路径值相等的最小代价(dfs+bfs)

news2024/10/5 16:26:22
题目描述
评论 (23)
题解 (54)
提交记录

2673. 使二叉树所有路径值相等的最小代价

难度 中等 14

给你一个整数 n 表示一棵 满二叉树 里面节点的数目,节点编号从 1 到 n 。根节点编号为 1 ,树中每个非叶子节点 i 都有两个孩子,分别是左孩子 2 * i 和右孩子 2 * i + 1 。

树中每个节点都有一个值,用下标从 0 开始、长度为 n 的整数数组 cost 表示,其中 cost[i] 是第 i + 1 个节点的值。每次操作,你可以将树中 任意 节点的值 增加 1 。你可以执行操作 任意 次。

你的目标是让根到每一个 叶子结点 的路径值相等。请你返回 最少 需要执行增加操作多少次。

注意:

  • 满二叉树 指的是一棵树,它满足树中除了叶子节点外每个节点都恰好有 2 个节点,且所有叶子节点距离根节点距离相同。
  • 路径值 指的是路径上所有节点的值之和。

 

示例 1:

输入:n = 7, cost = [1,5,2,2,3,3,1]
输出:6
解释:我们执行以下的增加操作:
- 将节点 4 的值增加一次。
- 将节点 3 的值增加三次。
- 将节点 7 的值增加两次。
从根到叶子的每一条路径值都为 9 。
总共增加次数为 1 + 3 + 2 = 6 。
这是最小的答案。

示例 2:

输入:n = 3, cost = [5,3,3]
输出:0
解释:两条路径已经有相等的路径值,所以不需要执行任何增加操作。

 

提示:

  • 3 <= n <= 105
  • n + 1 是 2 的幂
  • cost.length == n
  • 1 <= cost[i] <= 104
通过次数 3,343
提交次数 5,075
请问您在哪类招聘中遇到此题?
社招
校招
实习
未遇到
贡献者
LeetCode
相关企业
相关标签
贪心 树 数组 动态规划 二叉树
隐藏提示1
The path from the root to a leaf that has the maximum cost should not be modified.
隐藏提示2
The optimal way is to increase all other paths to make their costs equal to the path with maximum cost.
题目列表
随机一题

```cpp
class Solution {
public:
    vector<int> maxSum;
    int maxPathSum(int root, int n, vector<int>& cost) {
        if (root * 2 > n) {
            maxSum[root -1] = cost[root -1];
            return cost[root -1];
        }
        if (maxSum[root - 1] != 0) return maxSum[root - 1];
        int maxLeft = maxPathSum(root * 2, n, cost);
        int maxRight = maxPathSum(root * 2 + 1, n, cost);
        maxSum[root -1] = cost[root - 1] + max(maxLeft, maxRight);
        return maxSum[root -1];
    }
    int minIncrements(int n, vector<int>& cost) {
        maxSum.resize(n, 0);
        maxSum[0] = maxPathSum(1, n,  cost);

        queue<vector<int>> q;
        q.push({1, cost[0]});
        int maxV = maxSum[0];
        int ans = 0;
        while(!q.empty()) {
            auto top = q.front(); q.pop();
            int idx = top[0];
            int curSum = top[1];
 
            if (2 * idx > n) continue;
            if (curSum + maxSum[2 * idx - 1] == maxV) {
                q.push({2 * idx, curSum + cost[2 * idx -1]});
            }
            else {
                int tmp  =  (maxV - curSum - maxSum[2 * idx - 1]);
                ans += tmp;
                q.push({2 * idx, curSum + cost[2 * idx -1] + tmp});
                
            }

            if (curSum + maxSum[2 * idx] == maxV) {
                q.push({2 * idx + 1, curSum + cost[2 * idx]});
            }
            else {
                int tmp2  =  (maxV - curSum - maxSum[2 * idx]);
                ans += tmp2;
                q.push({2 * idx + 1, curSum + cost[2 * idx] + tmp2});
                
            }
        }
        return ans;
        
    }
};

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

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

相关文章

image adaptive 3dlut based on deep learning

文章目录 image adaptive 3dlut based on deep learning1. Learning Image-adaptive 3D Lookup Tables for High Performance Photo Enhancement in Real-time2. CLUT-Net: Learning Adaptively Compressed Representations of 3DLUTs for Lightweight Image Enhancement2.1 3d…

平安大视野解读主动健康:以运动改变生命轨迹,以名医权益为健康保驾护航

“每个人都会老&#xff0c;这不可避免&#xff0c;但是能不能老的迟一点&#xff1f;让我们能够活到一百岁还能够运动&#xff0c;不需要别人照顾&#xff0c;这是最大的成功&#xff1b;而科学运动是最关键的方式。”5月6日&#xff0c;在平安私人银行联合平安健康举办的“平…

Echarts使用本地JSON文件加载不出图表的解决方法以及Jquery访问本地JSON文件跨域的解决方法

前言 最近需要做一个大屏展示&#xff0c;需要用原生html5cssjs来写&#xff0c;所以去学了一下echarts的使用。在使用的过程中难免碰到许多BUG&#xff0c;百度那是必不可少的&#xff0c;可是这些人写的牛头不对马嘴&#xff0c;简直是标题党一大堆&#xff0c;令我作呕&…

使用pytest和allure框架实现自动化测试报告优化

目录 -x出现一条测试用例失败就退出测试 生成测试报告json pytest&#xff1a; 需要安装pytest和pytest-html(生成html测试报告&#xff09; pip install pytest 和 pip install pytest-html 命名规则 Pytest单元测试中的类名和方法名必须是以test开头,执行中只能找到test开头…

DeepLab v1

SEMANTIC IMAGE SEGMENTATION WITH DEEP CONVOLUTIONAL NETS AND FULLY CONNECTED CRFS 基于深度卷积网络和全连通CRFS的语义图像分割 ABSTRACT 深度卷积神经网络&#xff08;DCNNs&#xff09;最近在高级视觉任务中表现出了最新的性能&#xff0c;如图像分类和物体检测。这…

Docker | docker安装MySQL

知识目录 一、前言二、安装Docker镜像2.1 什么是docker2.2 为什么安装docker2.3 安装docker 三、Docker安装MySQL3.1 常用docker命令3.2 docker安装MySQL 四、结语 一、前言 大家好&#xff01;这篇文章主要讲解 如何在Centos7中安装Docker以及Docker安装MySQL:5.7.42 。 ✨本…

深度学习模型复杂度评估(时间复杂度、空间复杂度)

目录 1、两个指标 2、复杂度对模型的影响 1、两个指标 时间复杂度和空间复杂度是衡量一个算法的两个重要指标,用于表示算法的最差状态所需的时间增长量和所需辅助空间. 在深度学习神经网络模型中我们也通过&#xff1a; 计算量/FLOPS&#xff08;时间复杂度&#xff09;即…

VS Code 常用插件推荐

VS Code 常用插件推荐 1. Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code 适用于 VS Code 的中文&#xff08;简体&#xff09;语言包 2. Auto Rename Tag 自动关闭标签&#xff0c;写 html 标签的时候可以重命名标签名。 现在 vscode 已经内置了&…

大项目内训 2023.5.11

目录 分别介绍一下消息处理相关的MQ、WebSocket、分布式事务 介绍一下异步消息传输 如何配置websocket ​编辑 oatpp是什么&#xff1f; cinatra是什么&#xff1f; 我们教育最大的缺失, 是缺乏阅读、写作和逻辑训练 佳作推荐 分别介绍一下消息处理相关的MQ、WebSocket、…

CTF-PWN学习-为缺少指导的同学而生

很抱歉&#xff0c;博主也是个PWN的入门者。PWN的入门不可能是无痛的。能做到的只是减少一点初学者的痛苦。这篇博客会长期维护&#xff0c;也会越来越好。后期还可能会在B站出视频&#xff08;博主社恐&#xff0c;要迈出这一步可能需要好长时间&#xff09;。 PWN是个啥&…

QT + OpenGL + FFmpeg写的一个全景视频播放器

临时被分配了一个任务 写一个C版本的全景视频播放器 网上搜了搜 基于前辈的基础上 写的差不多了 测试视频源是用ffmpeg拉RTSP的流 最终是要嵌入到别的一个视频播放器模块 所以解码这块我不用太关注 只要实现渲染就可以了 效果如下 左边的窗口用于输入视频源 以及显示…

dtb展开成device_node

dtb展开成device_node 文章目录 dtb展开成device_node设备树是如何传递给内核的&#xff1f;设备树相关结构体举例of操作函数与查找节点有关的 OF 函数1、of_find_node_by_name 函数2、of_find_node_by_type 函数3、of_find_compatible_node 函数4、of_find_matching_node_and_…

5个PPT素材、模板网站,免费下载,赶紧马住了~

推荐几个可以免费下载PPT素材的网站&#xff0c;建议收藏&#xff01; 1、菜鸟图库 https://www.sucai999.com/search/ppt/0_0_0_1.html?vNTYwNDUx 菜鸟图库网有非常丰富的免费素材&#xff0c;像设计类、办公类、自媒体类等素材都很丰富。PPT模板种类很多&#xff0c;全部都…

Unity 坐标系

一、左手坐标系与右手坐标系 常见的三维软件都采用笛卡尔坐标系&#xff0c;也就是常见的xyz轴坐标系。笛卡尔坐标系可以是左手坐标系也可以是右手坐标系&#xff0c;如下图所示 两种坐标系是镜像对称的。而Unity采用左手系&#xff0c;且xyz轴的默认方向与图中的左手系完全一…

Java【网络编程1】什么是 TCP/IP 五层模型? 数据传输的封装和分用?

文章目录 前言一、网络协议分层二、数据的网络传输1, 封装2, 分用3, 实际情况 总结 前言 &#x1f4d5;各位读者好, 我是小陈, 这是我的个人主页 &#x1f4d7;小陈还在持续努力学习编程, 努力通过博客输出所学知识 &#x1f4d8;如果本篇对你有帮助, 烦请点赞关注支持一波, 感…

Python+Selenium入门级自动化测试脚本编写

一、安装Selenium 安装selenium有三种方式&#xff0c;主要有python下的pip命令安装或者是直接下载安装包进行安装本地文件夹以及直接用pycharm直接安装相应的selenium版本。推荐使用pycharm直接配置安装相应selenium版本&#xff08;此办法比pip更好用&#xff0c;且不用担心报…

大数据 | (六)Hadoop集群启停脚本

知识目录 一、前言二、Hadoop集群启停脚本2.1 启停脚本及其背景2.2 使用方法 三、jps脚本四、关机脚本五、结语 一、前言 hello&#xff0c;大家好&#xff01;这篇文章是我在使用Hadoop集群时使用到的启停脚本的详细内容与感想&#xff0c;希望能帮助到大家&#xff01; 本篇…

【ENVI】SEBS模型计算蒸散发

详细内容请关注微信公众号&#xff1a;夫也的笔记 #01. ENVI软件SEBS插件介绍 ENVI是利用一种能够提供完整图像处理的功能强大的结构性程序设计语言&#xff0c;ENVI的运行需要IDL的支持&#xff0c;IDL可以为数据的交互式分析和可视化提供一个计算环境&#xff0c;在IDL开发环…

【数据库】SQL Server2022安装教程

大家好&#xff0c;我是雷工&#xff01; 最近需要安装SQLServer数据库&#xff0c;此次安装的是sql_server_2022_developer版本&#xff0c;以下记录安装及配置过程。大家可以参考指正。 一、安装SQL Server步骤&#xff1a; 1、官网下载 SQL Server 2022 Developer。 2、打…

【逆向】PE文件解析

文章目录 PE文件DOS头部PE/NT头解析区段头/区块表解析数据目录表&#xff08;存放在某个区段&#xff09;1. 导出表2. 导入表3. 重定位表 PE文件 PE文件&#xff1a;PE文件是在windows平台可执行的文件。包括&#xff1a;.exe&#xff08;可执行程序&#xff09;&#xff0c;.…