当前位置: 首页 > news >正文

【代码随想录day 17】 力扣 654.最大二叉树

视频讲解:https://www.bilibili.com/video/BV1MG411G7ox/?vd_source=a935eaede74a204ec74fd041b917810c
文档讲解:https://programmercarl.com/0654.%E6%9C%80%E5%A4%A7%E4%BA%8C%E5%8F%89%E6%A0%91.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE
力扣题目:https://leetcode.cn/problems/maximum-binary-tree/

这道题主要是要搞清楚最大二叉树的定义:

  • 二叉树的根是数组中的最大元素。
  • 左子树是通过数组中最大值左边部分构造出的最大二叉树。
  • 右子树是通过数组中最大值右边部分构造出的最大二叉树。

因此步骤如下所示:

  1. 找出最大值确定为根节点,并赋值
  2. 分为左数组和右数组
  3. 左数组找最大值,再分
  4. 右数组找最大值,再分
  5. 如果没有左右数组直接跳过
  6. 直到数组长度为1,即遍历到了叶子节点,返回数组
class Solution {
public:TreeNode* constructMaximumBinaryTree(vector<int>& nums) {//终止条件,如果nums的长度只剩1就说明到叶子节点了TreeNode *node = new TreeNode(0);if(nums.size()==1){node->val=nums[0];return node;}//找根节点,就是数组的最大值int maxValue=0;int index=0;for(int i=0;i<nums.size();i++){if(nums[i]>maxValue){maxValue=nums[i];index=i;}}node->val=maxValue;//分割左右数组//如果左边有数据就说明有左子树if(index>0){vector<int > newVec(nums.begin(),nums.begin()+index);node->left = constructMaximumBinaryTree(newVec);}//如果右边有数据说明有右子树if(index<(nums.size()-1)){vector<int> newVec(nums.begin()+index+1, nums.end());node->right=constructMaximumBinaryTree(newVec);}return node;}
};
http://www.dtcms.com/a/326714.html

相关文章:

  • 贪心----2.跳跃游戏
  • 区块链技术原理(5)-网络
  • Docker部署MySQL完整指南:从入门到实践
  • Leetcode-25.K个一组翻转链表
  • 【13-向量化-高效计算】
  • 第二十一天:统计数字
  • 嵌入式系统学习Day16(C语言中的位运算)
  • 绿巨人VS Code多开项目单独管理每个项目单独使用一个不限制的augment
  • 构建AI代理工作流的开源利器——Sim Studio
  • 文件编辑html
  • C语言命令行参数
  • 北京JAVA基础面试30天打卡07
  • 【C++竞赛】核桃CSP-J模拟赛题解
  • 提示词工程实战:用角色扮演让AI输出更专业、更精准的内容
  • vagrant和itamae怎么配合使用? (放弃)
  • 33Nginx模块的从配置与优化
  • 如何使用curl编程来下载文件
  • MacBook 本地化部署 Dify 指南
  • AIDL简单使用
  • 【接口自动化测试】---YAML、JSON Schema
  • 逐际动力开源运控 tron1-rl-isaacgym 解读与改进
  • VMD例程(Matlab 2021b可直接使用)
  • 从“目标烂尾”到“100%交付”:谷歌OKR追踪系统如何用“透明化+强问责”打造职场责任闭环
  • 小白入门指南:Edge SCDN 轻松上手
  • Dify 从入门到精通(第 28/100 篇):Dify 的多租户架构
  • 【学习嵌入式day-21-Linux编程-shell命令】
  • 第九篇:调试工具:Three.js Inspector使用
  • 武汉火影数字|VR大空间是什么?如何打造VR大空间项目
  • 【华为机试】648. 单词替换
  • SciChart图形库应用