二叉树——最大二叉树

news2024/11/22 13:28:24

最大二叉树

链接
给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建:

创建一个根节点,其值为 nums 中的最大值。
递归地在最大值 左边 的 子数组前缀上 构建左子树。
递归地在最大值 右边 的 子数组后缀上 构建右子树。
返回 nums 构建的 最大二叉树 。

示例 1:
在这里插入图片描述

输入:nums = [3,2,1,6,0,5]
输出:[6,3,5,null,2,0,null,null,1]
解释:递归调用如下所示:

  • [3,2,1,6,0,5] 中的最大值是 6 ,左边部分是 [3,2,1] ,右边部分是 [0,5] 。
    • [3,2,1] 中的最大值是 3 ,左边部分是 [] ,右边部分是 [2,1] 。
      • 空数组,无子节点。
      • [2,1] 中的最大值是 2 ,左边部分是 [] ,右边部分是 [1] 。
        • 空数组,无子节点。
        • 只有一个元素,所以子节点是一个值为 1 的节点。
    • [0,5] 中的最大值是 5 ,左边部分是 [0] ,右边部分是 [] 。
      • 只有一个元素,所以子节点是一个值为 0 的节点。
      • 空数组,无子节点。
        示例 2:
        在这里插入图片描述

输入:nums = [3,2,1]
输出:[3,null,2,null,1]
提示:

1 <= nums.length <= 1000
0 <= nums[i] <= 1000
nums 中的所有整数 互不相同

思路

  • 返回值,参数
    返回值——构建树,返回节点
    参数——数组
    TreeNode* constructMaximumBinaryTree(vector<int>& nums) {

  • 终止条件
    1 <= nums.length <= 1000,数组不为空
    当数组为1时,说明到叶子节点了
  • 单次递归
  1. 找最大值和最大值位置,节点赋值
        int max=0;
        int maxIndex=0;
        for(int i=0;i<nums.size();i++)
        {
            if(nums[i]>max)
            {
                max=nums[i];
                maxIndex=i;
            }
        }       
        node->val=max;
  1. 左数组,右数组
        vector<int> leftnums(nums.begin(),nums.begin()+maxIndex);
        vector<int> rightnums(nums.begin()+maxIndex+1,nums.end());

+1 把最大值删除,不然死循环,爆内存

  1. 构建左子树,右子树
        if(leftnums.size()>0)node->left=constructMaximumBinaryTree(leftnums);
        if(rightnums.size()>0) node->right=constructMaximumBinaryTree(rightnums);

代码

class Solution {
public:
    TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
        TreeNode* node=new TreeNode(0);
        if(nums.size()==1)
        {
            node->val=nums[0];
            return node;
        }
        int max=0;
        int maxIndex=0;
        for(int i=0;i<nums.size();i++)
        {
            if(nums[i]>max)
            {
                max=nums[i];
                maxIndex=i;
            }
        }
        node->val=max;
        vector<int> leftnums(nums.begin(),nums.begin()+maxIndex);
        vector<int> rightnums(nums.begin()+maxIndex+1,nums.end());
        if(leftnums.size()>0)node->left=constructMaximumBinaryTree(leftnums);
        if(rightnums.size()>0) node->right=constructMaximumBinaryTree(rightnums);
        return node;
    }
};

问题

划分左数组,右数组,没有加一,把最大值删除,死循环,爆内存

        vector<int> leftnums(nums.begin(),nums.begin()+maxIndex);
        vector<int> rightnums(nums.begin()+maxIndex+1,nums.end());

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

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

相关文章

浅谈面向过程和面向对象的区别

面向过程和面向对象都是对软件分析、设计和开发的一种思想,它指导着人们以不同的方式去分析、设计和开发软件。 伴随着每个开发人员的职业生涯&#xff0c;或多或少都会接触到这两种软件设计思想。不仅是软件开发人员&#xff0c;其实这两种思想在我们平时的生活中也处处可见&a…

uniapp 超过2m无法上传代码!uni-module太大了,小程序无法上传怎么办?

问题描述&#xff1a; 虽然分包了。但是主包里还有很多uniui的组件&#xff0c;占了2m多&#xff0c;之前一直是点击运行&#xff0c;然后再上传代码。提示的超过2m无法上传。 解决办法&#xff1a; 点击发行&#xff0c;然后上传就可以了。 优化建议&#xff1a; 1、组件按…

面向对象的一点小想法

接口里的方法可以写也可以不写 如果写的话&#xff0c;那么得是默认方法&#xff0c;需要在前面加个default 对于默认方法&#xff0c;能够重写&#xff0c;或者直接继承&#xff08;也就是直接用&#xff09; 比如下面&#xff1a; 就直接调用了接口的默认函数nibuhao&#…

MongoDB安装和使用过程常见问题

文章目录一、安装过程显示没有相应的权限二、pymongo无法使用&#xff0c;报错一、安装过程显示没有相应的权限 oh我的天&#xff0c;找了网上很多种方法都不行哈哈 不同的电脑对应不同的问题吧~ 我的这个问题是这样解决滴 先直接简述操作路径&#xff0c;不明白的可以看如下图…

程序员生产力工具大全,软件开发者常用的工具有哪些?

有哪些神器&#xff0c;可以帮助程序员提高工作效率&#xff1f; 每一位程序员&#xff0c;都希望能在编程世界中实现自己的梦想。程序员是一个要不断向上攀爬的职业&#xff0c;需要学习新的知识&#xff0c;掌握新的工具&#xff0c;才能跟上时代的步伐。 工欲善其事&#…

Linux PWM 开发指南

Linux PWM 开发指南 1 概述 1.1 编写目的 介绍 PWM 模块的详细设计方便相关人员进行 PWM 模块的代码设计开发。 1.2 使用范围 适用于 Linux-3.10&#xff0c;linux-4.4 和 Linux-4.9 内核&#xff0c;Linux-5.4 内核。 1.3 相关人员 PWM 驱动的开发人员/维护人员等 2 术…

2022 赣育杯 CTF --- Crypto Lost_N wp

文章目录前言题目解题过程解题代码前言 这是去年江西省赛一道有点小坑的密码题&#xff0c;当时没做出来&#xff0c;今天回想起来重新做一下并且记录一下。 题目 Lost_N.py import gmpy2 from Crypto.Util.number import * # part1 flag bSangFor{} d getPrime(435) cou…

一篇文章弄清楚啥是数组和集合

数组和集合多语言都有&#xff0c;数组是集合的一种&#xff0c;是一种有序的集合&#xff0c;不面向对象&#xff0c;面向过程的也有。1.数组逻辑结构&#xff1a;线性的物理结构&#xff1a;顺序的存储结构申请内存&#xff1a;一次申请一大段连续的空间&#xff0c;一旦申请…

JAVA虚拟机JVM之内存模型

内存模型 java 内存模型 很多人将【java 内存结构】与【java 内存模型】傻傻分不清&#xff0c;【java 内存模型】是 Java Memory Model&#xff08;JMM&#xff09;的意思。 关于它的权威解释&#xff0c;请参考 https://download.oracle.com/otn-pub/jcp/memory_model-1.0…

【C++】string的9道OJ题

要么庸俗&#xff0c;要么孤独… 文章目录一、仅仅反转字母二、字符串中的第一个唯一字符&#xff08;计数排序的思想&#xff09;三、字符串相加&#xff08;做好加进位的工作即可&#xff09;四、把字符串转换成整数五、反转字符串中的单词 III六、字符串相乘&#xff08;高…

惠普庆祝在中国40年,强化中国发展战略

中国北京&#xff0c;2023年2月23日 ——今日&#xff0c;“品质信赖向未来” 惠普在中国40年系列活动启动仪式及惠普打印春季新品发布会在北京盛大举行。现场&#xff0c;惠普回顾了40年来与中国经济及产业共同发展的历程&#xff0c;并再次强调了惠普一以贯之的“在中国&…

3.GORM介绍和使用

目录 来源 什么是ORM ORM的优缺点 gorm介绍 安装 连接数据库 连接MySQL 连接PostgreSQL 连接Sqlite3 连接SQL Server GORM基本示例 Docker快速创建MySQL实例 创建数据库 GORM操作MySQL GORM Model定义 gorm.Model 模型定义示例 结构体标记&#xff08;tags&a…

力扣-文章浏览

大家好&#xff0c;我是空空star&#xff0c;本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目&#xff1a;1148. 文章浏览二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.其他总结前言 一、题目&#xff1a;1148…

立项近7年,索尼产品经理分享PS VR2开发背后的故事

备受期待的索尼PS VR2终于正式发售&#xff0c;VR爱好者们终于有机会体验到《地平线&#xff1a;山之呼唤》等PS VR2独占的VR大作。近期&#xff0c;为了解PS VR2头显诞生背后的故事&#xff0c;外媒AV Watch采访到PS VR2的开发负责人Yasuo Takahashi&#xff0c;在本次采访中&…

尚医通 (二十二)微信支付

目录一、微信支付介绍1、微信扫码支付申请2、开发文档3、微信支付SDK二、微信支付开发2、微信支付前端整合三、订单支付后处理一、微信支付介绍 1、微信扫码支付申请 微信扫码支付是商户系统按微信支付协议生成支付二维码&#xff0c;用户再用微信“扫一扫”完成支付的模式。…

若依框架整合JSP

今天接到组长任务要求SpringbootJSP完成页面渲染&#xff0c;因为是用的若依框架&#xff0c;一上午零零散散的找了很多资料和视频&#xff0c;没有达到理想的结果&#xff0c;在下午中午弄出来了&#xff0c;于是整理出来供大家查看引用。&#xff08;单纯Springboot项目怎么建…

webRTC学习-基础知识

webRTC学习1、webRTC简介1.1什么是webRTC&#xff1f;1.2、作用2、webRTC通信原理2.1、媒体协商&#xff08;SDP&#xff09;2.2、网络协商&#xff08;candidate&#xff09;2.2.1、STUN2.2.2、TURN2.3、媒体协商网络协商数据的交换通道webRTC官网1、webRTC简介 1.1什么是web…

wiblogic托管服务器 节点管理 日志文件

创建和配置托管服务器 配置托管服务器 启动托管服务器 startManagedWebLogic.cmd server1 http://localhost:7001 startManagedWebLogic.cmd server3 http://localhost:7001 配置和使用节点管理器 创建 计算机 配置机器 启动节点管理器 startNodeManager.cmd 验…

百度财报解读:营收持平净利增,“文心一言”站C位

ChatGPT之火&#xff0c;点燃了投资者对AI赛道的热情。 而自百度宣布生成式AI产品“文心一言”&#xff08;ERNIE Bot&#xff09;将于3月推出以来&#xff0c;这家公司一直处于市场关注的焦点。 2月22日&#xff0c;百度发布了2022年第四季度及全年财报。财报显示&#xff0c…

力扣79.单词搜索

文章目录力扣79.单词搜索题目描述方法一&#xff1a;回溯深搜力扣79.单词搜索 题目描述 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#x…