C++算法练习-day39——654.最大二叉树

题目来源:. - 力扣(LeetCode)

题目思路分析

题目描述

给定一个无序的整数数组,你需要构建一棵最大二叉树。在这棵二叉树中,每个节点的值都大于其子树中所有其他节点的值。换句话说,每个节点都是其子树中的最大值节点。根据这个定义,我们需要编写一个函数来构建这样的二叉树。

思路分析
  1. 方法一:单调栈

    • 使用一个栈来存储数组元素的索引,栈中的索引对应的元素值是单调递减的。
    • 遍历数组,对于每个元素,如果栈不为空且当前元素大于栈顶索引对应的元素值,则不断弹出栈顶元素,并将弹出的元素作为当前元素的左子节点。
    • 弹出结束后,如果栈不为空,则栈顶元素对应的节点为当前元素的右子节点的父节点(或祖父节点等,取决于之前弹出的元素数量)。
    • 将当前元素的索引压入栈中。
    • 最后,栈中剩余的索引对应的节点中,栈底的索引对应的节点即为整棵树的根节点。
  2. 方法二:递归

    • 递归地找到子数组中的最大值及其索引。
    • 以最大值为根节点创建一个新的树节点。
    • 递归地构建左子树和右子树,左子树由最大值左侧的子数组构建,右子树由最大值右侧的子数组构建。
    • 返回构建好的节点。

代码:

方法一:单调栈

class Solution {  
public:  TreeNode* constructMaximumBinaryTree(vector<int>& nums) {  int n = nums.size();  vector<int> value; // 用于存储数组元素的索引,保持栈中索引对应的元素值单调递减  vector<TreeNode*> tree(n); // 用于存储每个索引对应的树节点  for (int i = 0; i < n; ++i) {  tree[i] = new TreeNode(nums[i]); // 为当前元素创建一个新的树节点  // 当栈不为空且当前元素大于栈顶索引对应的元素值时,处理左子树  while (!value.empty() && nums[i] > nums[value.back()]) {  tree[i]->left = tree[value.back()]; // 将弹出的索引对应的节点作为当前节点的左子节点  value.pop_back(); // 弹出栈顶索引  }  // 如果栈不为空,则栈顶索引对应的节点为当前节点的右子节点的父节点(或更上层的节点)  // 但由于我们是从左到右遍历的,所以这里只需要将当前节点设置为栈顶索引对应节点的右子节点即可  // 之前的左子树构建已经确保了正确的父子关系  if (!value.empty()) {  tree[value.back()]->right = tree[i];  }  value.push_back(i); // 将当前索引压入栈中  }  // 栈底索引对应的节点即为整棵树的根节点  return tree[value[0]];  }  
};

方法二:递归

class Solution {  
public:  // 递归函数,用于构建最大二叉树  TreeNode* construct(const vector<int>& nums, int begin, int end) {  // 递归终止条件:子数组为空  if (begin > end) {  return nullptr;  }  // 找到子数组中的最大值及其索引  int max = begin;  for (int i = begin + 1; i <= end; ++i) {  if (nums[i] > nums[max]) {  max = i;  }  }  // 以最大值为根节点创建一个新的树节点  TreeNode* node = new TreeNode(nums[max]);  // 递归构建左子树和右子树  node->left = construct(nums, begin, max - 1);  node->right = construct(nums, max + 1, end);  // 返回构建好的节点  return node;  }  // 主函数,调用递归函数构建最大二叉树  TreeNode* constructMaximumBinaryTree(vector<int>& nums) {  return construct(nums, 0, nums.size() - 1);  }  
};

知识点摘要

  • 单调栈:用于解决一些与数组元素顺序相关的问题,通过维护一个单调的栈来优化算法。
  • 递归:一种在函数内部调用自身的方法,常用于解决可分解为相似子问题的问题。
  • 二叉树:一种数据结构,其中每个节点最多有两个子节点,称为左子节点和右子节点。

本文介绍了两种从无序整数数组构建最大二叉树的方法:单调栈和递归。单调栈方法通过维护一个单调递减的栈来构建二叉树,而递归方法则通过递归地找到子数组中的最大值来构建二叉树。两种方法各有优缺点,单调栈方法在某些情况下可能更高效,而递归方法则更直观易懂。无论使用哪种方法,都需要对二叉树的基本结构和操作方法有深入的理解。通过这两种方法的比较和学习,我们可以更好地理解数据结构中的算法设计和优化。

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

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

相关文章

Electron教程1-初学入门

玩转Electron Electron 是什么注意事项环境安装安装 vscode安装 git 第一个实例第二个实例第二个实例解读 总结问题解答 Electron 是什么 Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个…

柠乐音乐 1.3.87 | 界面优美支持无损音乐下载的音乐播放器

柠乐音乐app提供丰富的音乐资源&#xff0c;涵盖流行、摇滚、古典等多种类型音乐&#xff0c;并且全部免费。支持FLAC无损音质音乐免费高速下载。内置独特推荐算法&#xff0c;可根据用户喜好智能推荐音乐。还包括电台播放资源、歌单同步&#xff08;支持网易云音乐和QQ音乐&am…

【资料】网络安全风险评估报告,风险管理报告,网络安全风险管理计划,网络安全网络安全能力验证报(Word原件)

一、概述 1.1工作方法 1.2评估依据 1.3评估范围 1.4评估方法 1.5基本信息 二、资产分析 2.1 信息资产识别概述 2.2 信息资产识别 三、评估说明 3.1无线网络安全检查项目评估 3.2无线网络与系统安全评估 3.3 ip管理与补丁管理 3.4防火墙 四、威胁细类分析 4.1威胁…

change buffer:到底应该选择普通索引还是唯一索引

文章目录 引言第一章&#xff1a;普通索引和唯一索引在查询逻辑与效率上的对比1.1 查询逻辑分析1.2 查询效率对比 第二章&#xff1a;普通索引和唯一索引在更新逻辑与效率上的对比2.1 更新逻辑分析2.2 更新效率对比 第三章&#xff1a;底层原理详解 - 普通索引和唯一索引的区别…

软件工程师简历(精选篇)

【#软件工程师简历#】 一份专业而精准的软件工程师简历&#xff0c;不仅能够全面展示技术实力和项目经验&#xff0c;更是赢得理想工作机会的重要敲门砖。那么&#xff0c;如何撰写一份令人印象深刻的软件工程师简历呢&#xff1f;以下是幻主简历整理的软件工程师简历&#xf…

深度学习推荐系统的工程实现

参考自《深度学习推荐系统》——王喆&#xff0c;用于学习和记录。 介绍 之前章节主要从理论和算法层面介绍了推荐系统的关键思想。但算法和模型终究只是“好酒”&#xff0c;还需要用合适的“容器”盛载才能呈现出最好的味道&#xff0c;这里的“容器”指的就是实现推荐系统…

前缀和技巧解析

前缀和技巧解析 前缀和&#xff08;Prefix Sum&#xff09;是一种常用的算法技巧&#xff0c;用于高效地处理一系列连续子数组和的问题。通过构建一个额外的数组来存储从数组起始位置到当前位置的累计和&#xff0c;可以在常数时间内快速计算任意区间的和。 前缀和应用的典型…

(undone) MIT6.S081 2023 学习笔记 (Day4: LAB3 page tables)

LAB 网页&#xff1a;https://pdos.csail.mit.edu/6.S081/2023/labs/pgtbl.html 任务1&#xff1a;Speed up system calls 根据网页&#xff0c;操作系统可以通过把部分数据放入用户空间的页表&#xff0c;来使得部分系统调用不用进入内核空间&#xff0c;从而提高速度。我们的…

CSS:怎么把网站都变成灰色

当大家看到全站的内容都变成了灰色&#xff0c;包括按钮、图片等等。这时候我们可能会好奇这是怎么做到的呢&#xff1f; 有人会以为所有的内容都统一换了一个 CSS 样式&#xff0c;图片也全换成灰色的了&#xff0c;按钮等样式也统一换成了灰色样式。但你想想这个成本也太高了…

探索Python文档自动化的奥秘:`python-docx`库全解析

文章目录 探索Python文档自动化的奥秘&#xff1a;python-docx库全解析1. 背景&#xff1a;为何选择python-docx&#xff1f;2. python-docx是什么&#xff1f;3. 如何安装python-docx&#xff1f;4. 简单库函数使用方法创建文档添加段落添加标题添加表格插入图片 5. 应用场景自…

OCP证书如何下载?

访问Oracle CertView网站&#xff1a; 打开网址 https://certview.oracle.com/ &#xff0c;这是Oracle官方提供的证书查询平台 。 登录账号&#xff1a; 使用您的Oracle账号和密码登录CertView。如果您不记得密码&#xff0c;可以通过注册账号时预留的邮箱重置密码 。 查看成…

OBOO鸥柏“触摸屏广告一体机交互”亮相2024中国珠海航展

2024年11月12日&#xff0c;第十五届中国国际航空航天博览会&#xff08;简称中国航展或珠海航展&#xff09;在珠海拉开帷幕。展会现场&#xff0c;既有OBOO鸥柏一大批高精尖液晶显示产品集体亮相&#xff0c;也有航天相关科技领域及飞行表演队炫技蓝天等。在中国航展的各个科…

【智能分子动力学】深度学习驱动分子动力学方法概述

深度学习驱动分子动力学&#xff08;Deep Learning-driven Molecular Dynamics&#xff0c;简称DLDMD&#xff09;方法是将深度学习技术应用于分子动力学模拟中的一种创新方法。这种方法通过深度学习模型来提升传统分子动力学模拟的效率和精度&#xff0c;尤其是在复杂系统的建…

(69)基于Hilbert(希尔伯特)变换的调相信号解调的MATLAB仿真

文章目录 前言一、希尔伯特变换二、相位调制1.基本原理2.调制特点3.应用 三、使用希尔伯特变换进行相位解调的原理1. 解调原理2.算法优点 四、MATLAB仿真1. 仿真代码2. 仿真结果 总结 前言 本文首先介绍了相位调制技术&#xff0c;然后说明了使用希尔伯特变换进行调相信号解调…

ISUP协议视频平台EasyCVR视频设备轨迹回放平台智慧农业视频远程监控管理方案

在当今快速发展的农业领域&#xff0c;智慧农业已成为推动农业现代化、助力乡村全面振兴的新手段和新动能。随着信息技术的持续进步和城市化进程的加快&#xff0c;智慧农业对于监控安全和智能管理的需求日益增长。 视频设备轨迹回放平台EasyCVR作为智慧农业视频远程监控管理方…

Python——NumPy库的简单用法,超级详细教程使用

一、什么是NumPy库 NumPy&#xff1a;它是python的一个科学计算库函数&#xff0c;它是由c语言编写的 它应用于数据处理、机器学习、图像处理、文件操作等等 二、array函数 这里导入库numpy&#xff0c;命名为np&#xff0c;后面的np都是代表着是numpy函数 array函数表示创建…

【postman】怎么通过curl看请求报什么错

获取现成的curl方式&#xff1a; 1&#xff0c;拿别人给的curl 2&#xff0c;手机app界面通过charles抓包&#xff0c;点击接口复制curl 3&#xff0c;浏览器界面-开发者工具-选中接口复制curl 拿到curl之后打开postman&#xff0c;点击import&#xff0c;粘贴curl点击send&am…

高翔【自动驾驶与机器人中的SLAM技术】学习笔记(十三)图优化SLAM的本质

一、直白解释slam与图优化的结合 我从b站上学习理解的这个概念。 视频的大概位置是1个小时以后&#xff0c;在第75min到80min之间。图优化SLAM是怎么一回事。 slam本身是有运动方程的&#xff0c;也就是运动状态递推方程&#xff0c;也就是预测过程。通过t1时刻&#xff0c…

哔哩喵 2.3.11 | 非常好用的第三方B站客户端

哔哩喵是一款非常好用的第三方B站客户端&#xff0c;它允许用户查看各个分区在每个时间段的热门视频列表&#xff0c;支持关键字和UP主屏蔽功能&#xff0c;并能通过添加代理服务器来观看受地区限制的番剧。最新版本2.3.11更新了多项功能&#xff0c;包括个人中心头像及动态大图…

算法定制LiteAIServer摄像机实时接入分析平台玩手机打电话检测算法:智能监控的新篇章

在现代社会&#xff0c;随着智能手机的普及&#xff0c;无论是在工作场所还是公共场所&#xff0c;玩手机或打电话的行为日益普遍。然而&#xff0c;在某些特定环境下&#xff0c;如工厂生产线、仓库、学校课堂等&#xff0c;这些行为可能会影响到工作效率、安全或教学秩序。为…