178.二叉树:最大二叉树(力扣)

news2024/12/23 9:48:09

代码解决

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    TreeNode* constructMaximumBinaryTree(vector<int>& nums) 
    {
        // 创建一个新的树节点,初始值为0
        TreeNode* node = new TreeNode(0);
        // 如果输入数组长度为1,直接赋值给根节点的值,并返回该节点
        if(nums.size()==1)
        {
            node->val=nums[0];
            return node;
        }

        // 初始化最大值为0,索引为0
        int maxVal = 0;
        int index = 0;
        // 遍历数组找到最大值及其索引
        for(int i = 0; i < nums.size(); i++)
        {
            if(nums[i] > maxVal)
            {
                maxVal = nums[i];
                index = i;
            }
        }

        // 将最大值赋给根节点
        node->val = maxVal;
        // 如果最大值索引大于0,递归构建左子树
        if(index > 0)
        {
            // 创建左子数组
            vector<int> vec(nums.begin(), nums.begin() + index);
            // 递归构建左子树
            node->left = constructMaximumBinaryTree(vec);
        }

        // 如果最大值索引小于数组长度减1,递归构建右子树
        if(index < (nums.size() - 1))
        {
            // 创建右子数组
            vector<int> vec1(nums.begin() + index + 1, nums.end());
            // 递归构建右子树
            node->right = constructMaximumBinaryTree(vec1);
        }
        // 返回构建的树节点
        return node;
    }
};
  1. 首先创建一个新的树节点 node,其初始值为0。
  2. 如果输入数组长度为1,直接将数组中的第一个元素赋值给根节点的值,并返回该节点。
  3. 初始化最大值为0,索引为0。
  4. 遍历数组,找到最大值及其索引。
  5. 将最大值赋给根节点的值。
  6. 如果最大值索引大于0,创建一个包含从数组开始到最大值索引的子数组,递归构建左子树。
  7. 如果最大值索引小于数组长度减1,创建一个包含从最大值索引+1到数组结束的子数组,递归构建右子树。
  8. 返回构建的树节点。

这个算法的时间复杂度是 O(n),因为每个节点都会被访问一次,其中 n 是数组中元素的数量。空间复杂度也是 O(n),因为需要存储递归调用的栈。

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

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

相关文章

Spring AI 大模型返回内容格式化源码分析及简单使用

为什么需要格式化输出 对于依赖可靠解析输出值的下游应用程序来说&#xff0c;生成结构化输出是LLMs非常重要的能力。开发人员希望快速将 AI 模型的结果转换为数据类型&#xff0c;例如 JSON、XML 或 Java 类&#xff0c;这些数据类型可以传递给其他应用程序函数和方法。 特别…

【数据分享】中国价格统计年鉴(2013-2022)

大家好&#xff01;今天我要向大家介绍一份重要的中国价格统计数据资源——《中国价格统计年鉴》。这份年鉴涵盖了从2013年到2022年中国价格统计全面数据&#xff0c;并提供限时免费下载。&#xff08;无需分享朋友圈即可获取&#xff09; 数据介绍 在过去的十年里&#xff0…

解决While loop问题 - Python

当我们在使用 while 循环时&#xff0c;需要确保循环的终止条件最终会被满足&#xff0c;否则循环将会无限执行下去。通常情况下&#xff0c;我们可以在循环内部修改循环控制变量&#xff0c;使得终止条件得以满足。 1、问题背景 一位开发者在使用 Python 开发一个基于文本的游…

NI USB-6009 DAQ采集卡拆解

所需设备&#xff1a; 1、NI USB-6009采集卡&#xff1b; 2、逻辑分析仪&#xff1b; NI USB-6009采集卡全貌&#xff1a; 性能参数&#xff1a; 内部照片&#xff1a; ADC芯片指标&#xff1a; 接线图&#xff1a; 差分模式采样&#xff1a; 采集过程中的SPI总线数据监控&a…

Laravel 6 - 第十九章 模型文件

​ 文章目录 Laravel 6 - 第一章 简介 Laravel 6 - 第二章 项目搭建 Laravel 6 - 第三章 文件夹结构 Laravel 6 - 第四章 生命周期 Laravel 6 - 第五章 控制反转和依赖注入 Laravel 6 - 第六章 服务容器 Laravel 6 - 第七章 服务提供者 Laravel 6 - 第八章 门面 Laravel 6 - …

不谈AI能替代什么,就聊能帮我们干活的AI客服机器人!

最近在直播群里有老板在找客服外包&#xff0c;因为客服压力大&#xff0c;接不过来了&#xff0c;想找找外包支援一下。据了解电商客服除了压力大&#xff0c;还会遇到过量的重复劳动&#xff0c;比如我们问一个产品&#xff0c;同一天可能就有几百上千客户问同样的问题&#…

如何把视频的声音转换成音频?干货分享

在数字时代&#xff0c;我们常常需要处理视频文件&#xff0c;而有时候我们只对视频中的音频部分感兴趣。无论是提取影片中的音乐、制作声音效果&#xff0c;还是其他音频处理需求&#xff0c;将视频的声音转换成音频是一个常见而有用的技能。如何把视频的声音转换成音频&#…

css实现优惠券样式

实现优惠券效果&#xff1a; 实现思路&#xff1a; 需要三个盒子元素&#xff0c;使用 css 剪裁&#xff0c;利用 ellipse 属性&#xff0c;将两个盒子分别裁剪成两个半圆&#xff0c;位置固定在另一个盒子元素左右两边适当位置上。为另一个盒子设置想要的样式&#xff0c;圆角…

Tailwind CSS 实战指南:快速构建响应式网页设计

title: Tailwind CSS 实战指南&#xff1a;快速构建响应式网页设计 date: 2024/6/12 updated: 2024/6/12 author: cmdragon excerpt: 这篇文章介绍了Tailwind CSS框架的特点与优势&#xff0c;包括其作为实用性的CSS框架如何通过预设的样式类实现快速布局和设计&#xff0c;…

jeecgboot右上角用户重置密码权限按钮配置不生效问题解决

选了菜单权限用户重置密码权限按钮还是不生效&#xff0c;使用这个缓存读取的是下述redis文件中&#xff0c;用户退出了账户&#xff0c;重新登陆也只会刷新token但是并不会刷新这这个配置&#xff0c;所以需要手动清除redis缓存。 这个问题我也是看了很久才发现&#xff0c;如…

新能源车用驱动器 电机电驱

硕博电子的电机电驱是以一体化动力总成为设计理念&#xff0c;整合电控、电机核心模块&#xff0c;推出的电机电控一体化动力总成。电机电控动力总成采用矢量控制算法和CAN总线通信技术&#xff0c;体积小、效率高、免维护、电磁兼容性强、方便调试&#xff0c;提高了系统的可靠…

【源码】16国语言交易所源码/币币交易+期权交易+秒合约交易+永续合约+交割合约+新币申购+投资理财/手机端uniapp纯源码+PC纯源码+后端PHP

测试环境&#xff1a;Linux系统CentOS7.6、宝塔面板、Nginx、PHP7.3、MySQL5.6&#xff0c;根目录public&#xff0c;伪静态laravel5&#xff0c;开启ssl证书 语言&#xff1a;16种&#xff0c;看图 这套带前端uniapp纯源码&#xff0c;手机端和pc端都有纯源码&#xff0c;后…

指定cuda版本的torch包安装

文章目录 1.查看自己电脑的cuda版本2.确定安装torch的conda指令2.1进入网站[cuda对应的torch版本](https://pytorch.org/get-started/previous-versions/) 3.检验torch的cuda版本是否可用 1.查看自己电脑的cuda版本 winr输入cmd回车进行电脑终端界面 输入nvidia-smi指令 nvid…

【CT】LeetCode手撕—53. 最大子数组和

目录 题目1-思路2- 实现⭐53. 最大子数组和——题解思路 3- ACM 实现 题目 原题连接&#xff1a;53. 最大子数组和 1-思路 动规五部曲 1. 定义 dp 数组 dp[i] 含义为&#xff1a;下标为 i 的数组的最大子数组和 2. 递推公式 因为所求的是最大子数组的和&#xff0c;即当前 n…

转型AI产品经理(8):“习惯形成模型”如何应用在Chatbot产品中

习惯形成模型是心理学中用来解释习惯如何产生、发展以及如何被改变的理论框架。它通常包含以下几个关键阶段&#xff1a; 1. 触发 习惯循环的开始是一个触发因素&#xff0c;它可以是外部的&#xff08;如时间、地点、情绪状态、特定的人或物&#xff09;或内部的&#xff08…

红海云入选《2024中国数据智能产业图谱1.0》

近日&#xff0c;国内知名大数据产业创新服务媒体数据猿携手上海大数据联盟重磅发布了《2024中国数据智能产业图谱1.0》。红海云凭借在人力资源数字化应用领域的卓越产品创新与服务&#xff0c;成功入选图谱「 企业应用-人力资源」板块。 《2024中国数据智能产业图谱1.0》由数…

深度学习(一)——使用Python读取图片

一、Python学习两大道具 1. dir()工具 作用&#xff1a;支持打开package&#xff0c;看到里面的工具函数 示例&#xff1a; (1) 输出torch库包含的函数 dir(torch)(2) 输出torch.AVG函数中的参数 dir(torch.AVG)2. help()工具 作用&#xff1a;说明书&#xff0c;查看库中…

代码随想录算法训练营第35天|● 1005.K次取反后最大化的数组和 ● 134. 加油站● 135. 分发糖果

K次取反后最大化的数组 1005. K 次取反后最大化的数组和 - 力扣&#xff08;LeetCode&#xff09; 本题首先想到尽可能将负的数变成正数&#xff0c;这样才能得到最大和,将数组进行按绝对值大小进行降序排序&#xff0c;若遇到负数将其取反后k--&#xff0c;若后面大于0 &…

7.枚举和模式匹配

一、enum枚举 1.1 定义枚举类型和对应的数据 //定义枚举 #[derive(Debug)] enum IpAddrKind{IPv4,IPv6, }struct Ipaddr{kind: IpAddrKind, //设置kind为IpAddrKind的枚举类型address: String, }fn route(ip_addr: &Ipaddr){println!("ip_type {:#?}", ip_a…

arxiv提交报错解决指南

- 编译时无错误 - 所有文件和图片文件都在同一目录下 - 生成.bbl文件 overleaf将参考文献格式bib转bbl&#xff08;bibitem&#xff09;_overleaf bbl文件-CSDN博客 - .tex文件、.bib文件、.bbl文件 的文件名要一致&#xff0c;修改.bib文件名记得在.tex文件中修改bibliograp…