LeetCode 654 最大二叉树

news2024/11/16 11:48:21

题目: 给定一个不重复的整数数组 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]

思路:

首先找最大树作为根节点,并记录索引,索引左边的为二叉树的左子树,右边为右子树,不断递归遍历左右两边。

struct TreeNode {
    int val;
    TreeNode* left; //左节点
    TreeNode* right; //右节点
    TreeNode(int x):val(x),left(NULL),right(NULL){} //构造函数,初始化val,left,right
};

class Solution {
public:
    //构建二叉树的函数,接受nums数组和左右边界
    TreeNode* buildtree(vector<int>& nums, int left, int right) {
        //如果左边界大于右边界,返回空节点
        if (left > right) {
            return NULL;
        }
        //取当前区间内最大数的下标
        int best = left;
        for (int i = left + 1; i <= right; i++) {
            if (nums[i] > nums[best]) {
                best = i;
            }
        }
        //用当前区间最大数构建新节点
        TreeNode* node = new TreeNode(nums[best]);
        //分别对左右区间递归调用buildtree函数
        node->left = buildtree(nums, left, best - 1);
        node->right = buildtree(nums, best + 1, right);
        //返回新节点
        return node;
    }
    //对二叉树进行层序遍历的函数
    vector<int> test(TreeNode* root) {
        queue<TreeNode*> que; //定义队列que
        if (root != NULL) {
            que.push(root); //如果根节点不为空,将根节点加入队列
        }
        vector<int> result; //定义返回结果result
        while (!que.empty()) { //当队列不为空时
            int size = que.size(); //获取队列大小
            for (int i = 0; i < size; i++) {
                TreeNode* node = que.front(); //获取队首元素
                result.push_back(node->val); //将队首元素的值加入result
                que.pop(); //弹出队首元素
                if (node->left)que.push(node->left); //如果该节点的左子节点不为空,将左子节点加入队列
                if (node->right)que.push(node->right); //如果该节点的右子节点不为空,将右子节点加入队列
            }
        }
        //返回结果result
        return result;
    }
};

//主函数
int main() {
    vector<int> nums = { 3, 2, 1, 6, 0, 5 }; //初始化nums数组
    Solution ss; //定义解决方案实例ss
    TreeNode* root = ss.buildtree(nums,0,nums.size()-1); //用buildtree函数构建二叉树,并将根节点指针赋给root
    vector<int> vec = ss.test(root); //用test函数对构建的二叉树进行层序遍历,结果存入vec
    for (vector<int>::iterator it = vec.begin(); it != vec.end();it++) {
        cout << *it << " "; //输出vec中的元素
    }
    cout << endl; //输出

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

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

相关文章

VMware ESXi 8.0c Unlocker OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动版)

发布 ESXi 8.0 集成驱动版&#xff0c;在个人电脑上运行企业级工作负载 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-esxi-8-sysin/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 发布 ESXi 8.0 集成驱动版&am…

在 Python 中计算两个数字之间的百分比

要计算两个数字之间的百分比&#xff0c;请将一个数字除以另一个数字&#xff0c;然后将结果乘以 100&#xff0c;例如 (30 / 75) * 100。这显示第一个数字占第二个数字的百分比。 在示例中&#xff0c;30 是 75 的 40%。 def is_what_percent_of(num_a, num_b):return (num_a…

论Sort()方法在 Python 和 Javascript 中应用的区别

Sort()方法相信大家都熟悉&#xff0c;用于排序&#xff0c;那就是数字从低到高&#xff08;默认&#xff09; 和 从高到低。以下对这个排序方法在Python 和 Java Script 中应用的区别作详细的举例说明。 在 Python中&#xff0c;例如有 lst1 : [1,5,8,6,2] &#xff0c;要对这…

html制作好看的个人简历(附源码)

文章目录1.设计来源1.1 主界面1.2 基本资料页面1.3 个人名言页面1.4 教育经历页面1.5 联系方式页面1.6 自我评价页面1.7 工作经历页面1.8 兴趣爱好页面1.9 沟通交流页面2.效果和源码2.1 动态效果2.2 源代码2.3 相关个人简历源码源码下载作者&#xff1a;xcLeigh 文章地址&#…

java课程设计(学生信息管理系统设计)+数据库

&#x1f50d; &#x1f50e; 本期带领大家一起来学习java课程设计&#xff08;学生信息管理系统设计&#xff09;数据库的实现思路 &#x1f50d; &#x1f50e; 文章目录题目要求数据库&#x1f30d;一 、环境搭建&#x1f30d;二 、功能实现 &#x1f30e; &#x1f30d;1.学…

重磅!阿里版本【ChatGPT】开放测评!

前两天突然爆出惊人消息&#xff1a;阿里版ChatGPT开放测评了&#xff01; 在本月初&#xff0c;已经有诸多关于阿里巴巴即将推出类似ChatGPT产品的传闻。 数日前&#xff0c;首批曝光的天猫精灵“鸟鸟分鸟”脱口秀版GPT基于大型模型的“精简版”&#xff0c;凭借其出色的表现吸…

2023-4-11-chrono库用法学习

&#x1f37f;*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* &#x1f37f;&#x1f4a5;&#x1f4a5;&#x1f4a5;欢迎来到&#x1f91e;汤姆&#x1f91e;的csdn博文&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49f;&#x1f49f;喜欢的朋友可以关注一下&#xff0…

4.9、字节序

4.9、字节序1.简介2.字节序举例3.判断电脑存储方式代码1.简介 现代 CPU 的累加器一次都能装载&#xff08;至少&#xff09;4 字节&#xff08;这里考虑 32 位机&#xff09;&#xff0c;即一个整数。那么这 4字节在内存中排列的顺序将影响它被累加器装载成的整数的值&#xff…

vue element-ui 暗黑主题应用到若依框架

问题描述 基于若依框架的element-ui&#xff0c;将主题更换为暗黑主题。 问题分析 现有的element-ui框架提供的主题不满足自定义需求&#xff0c;大多数框架&#xff0c;包括若依提供了更换主题色的功能&#xff0c;但也只是更换的primary-color&#xff0c;其他组件的主题还…

算法小课堂(五)贪心算法

一、概述 贪心算法是一种常见的算法思想&#xff0c;用于解决优化问题。其基本思想是在每一步选择中都采取当前状态下最优的选择&#xff0c;从而希望能够获得全局最优解。 具体来说&#xff0c;贪心算法通常分为以下步骤&#xff1a; 定义问题的最优解&#xff0c;通常需要将…

【人生历程】我的创作纪念日

目录 与编程不得不说的爱恨情仇 在csdn的收获&#xff1a; 与csdn的日常 在平凡的日子偶然的成就感&#xff1a; 对未来的憧憬&#xff1a; 今天是2023.4.8号&#xff0c;早上的刚刚参加完蓝桥杯&#xff0c;下午看到csdn官方的活动&#xff0c;心血来潮写下以下内容&…

家政服务小程序实战开发教程018-用户注册

我们在教程的一开始的时候就讲解了用户注册的功能。当初的规划是一进来就让用户自主的选择角色&#xff0c;然后提交用户信息&#xff0c;如果未注册就跳转到注册界面。 随着教程的深入&#xff0c;又参考了很多线上的小程序&#xff0c;发现这种模式也有一定的缺点。因为作为…

Linux网络虚拟化2

Linux网络虚拟化2 今天我们接着上节课介绍的 Linux 网络知识&#xff0c;继续来学习它们在虚拟化网络方面的应用&#xff0c;从而为后续学习容器编排系统、理解各个容器是如何通过虚拟化网络来协同工作打好基础。 这一篇内容较多&#xff0c;可以重点看标红部分和标粗部分​。…

Ubuntu环境下minicom使用

1、minicom的安装 sudo apt-get install minicom2、minicom的配置 sudo minicom -s # 打开minicom配置界面3、配置serial port setup串口信息 使用上下箭头选择&#xff0c;enter进入。 按A修改Serial Device&#xff0c;修改之前可以用命令ls -la /dev/ttyUSB或者ls -la …

java 一文讲透集合框架(10万字博文)

目录 一、前言 二、集合简介 1.定义 : 2.集合与数组的区别 : 3.集合的好处 : 三、集合框架 1.单列集合 2.双列集合 Δ体系图&#xff08;重要&#xff09; 四、List集合详解&#xff08;三万余字&#xff09; 五、Set集合详解&#xff08;三万余字&#xff09; 六、增…

学习实践-Whisper语音识别模型实战(部署+运行)

1、Whisper内容简单介绍 OpenAI的语音识别模型Whisper&#xff0c;Whisper 是一个自动语音识别&#xff08;ASR&#xff0c;Automatic Speech Recognition&#xff09;系统&#xff0c;OpenAI 通过从网络上收集了 68 万小时的多语言&#xff08;98 种语言&#xff09;和多任务…

论文笔记|CVPR2023:Semantic Prompt for Few-Shot Image Recognition

论文地址&#xff1a;https://arxiv.org/pdf/2303.14123.pdf 这是一篇2023年发表在CVPR上的论文&#xff0c;论文题目是Semantic Prompt for Few-Shot Image Recognitio&#xff0c;即用于小样本图像识别的语义提示。 1 Motivation 第一&#xff0c;最近几项研究利用 语义信…

< Linux >:进程地址空间

目录 一、验证进程地址空间 二、感知进程地址空间的存在 一、验证进程地址空间 我们之前学的 C/C 程序地址空间是物理内存吗&#xff1f; 答&#xff1a;不是物理内存&#xff0c;甚至叫做程序地址空间都不太准确&#xff0c;应该叫做进程地址空间&#xff0c;因此根本就不是…

Notion插件,让你的页面有无限可能

// 你是否觉得notion的极简风格略为单调&#xff1f;是否想用notion实现更多的功能&#xff1f;是否想让notion更为便捷&#xff0c;更为多样化&#xff1f;那今天推荐的几款notion插件绝对不能错过&#xff0c;因为他们也确实不错。 // - ———byFutureForce DAO——— - 你…

把ChatGPT接入我的个人网站

效果图 详细内容和使用说明可以查看我的个人网站文章 把ChatGPT接入我的个人网站 献给有外网服务器的小伙伴 如果你本人已经有一台外网的服务器&#xff0c;并且页拥有一个OpenAI API Key&#xff0c;那么下面就可以参照我的教程来搭建一个自己的ChatGPT。 需要的环境 Cento…