题目链接:力扣s

思路:

递归

递归函数声明:

TreeNode*  constructMaximumBinaryTree(vector<int>& nums)

递归出口: 

(1)nums数组为空,返回空节点

(2)nums数组个数为1,返回用该值构造的根节点

递归体:

找到nums最大值,构造根节点

for(int i=0;i<nums.size();i++){
if(max<n){max=n;max_index=i;
}}

找出nums中最大值max和最大值下标max_index

TreeNode *root=new TreeNode(max);

构造根节点

数组分为最大值左面的数组nums1,最大值右面的数组nums2

vector<int>nums1(nums.begin(),nums.begin()+max_index);vector<int>nums2(nums.begin()+max_index+1,nums.end());

递归构造左子树和右子树

TreeNode *l = constructMaximumBinaryTree (nums1);TreeNode *r= constructMaximumBinaryTree(nums2);

构造整棵树

root->left=l;root->right=r; 

 完整代码


class Solution {
public:TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
if(nums.size()==0)
{return NULL;
}
if(nums.size()==1)
{TreeNode *root=new TreeNode(nums[0]);return root;
}int max_index=0;
int max=-1;
for(int i=0;i<nums.size();i++)
{if(max<nums[i]){max=nums[i];max_index=i;}
}
TreeNode *root=new TreeNode;
root->val=max;
vector<int>nums1(nums.begin(),nums.begin()+max_index);
vector<int>nums2(nums.begin()+max_index+1,nums.end());
TreeNode *l=constructMaximumBinaryTree(nums1);
TreeNode *r=constructMaximumBinaryTree(nums2);
root->left=l;
root->right=r;
return root;}
};

LeetCode 654 最大二叉树相关推荐

  1. LeetCode 654. 最大二叉树(递归)

    文章目录 1. 题目 2. 解题 1. 题目 给定一个不含重复元素的整数数组.一个以此数组构建的最大二叉树定义如下: 二叉树的根是数组中的最大元素. 左子树是通过数组中最大值左边部分构造出的最大二叉树 ...

  2. leetcode —— 654. 最大二叉树

    给定一个不含重复元素的整数数组.一个以此数组构建的最大二叉树定义如下: 二叉树的根是数组中的最大元素. 左子树是通过数组中最大值左边部分构造出的最大二叉树. 右子树是通过数组中最大值右边部分构造出的最 ...

  3. 自我总结:Leetcode 654, 105, 106, 889

    终于算是熬过期末以后想起来了学学习了哈哈哈哈. 今天看看二叉树的构造,以下内容为自我学习总结,主要目的为学习笔记,兼职传播小想法.内容为学习labuladong的学习笔记.以下为链接,感谢大佬的学习讲 ...

  4. LeetCode实战:二叉树的最近公共祖先

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Given a bin ...

  5. LeetCode实战:二叉树中的最大路径和

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Given a non ...

  6. leetcode 617. 合并二叉树 思考分析

    题目 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠. 你需要将他们合并为一个新的二叉树.合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否 ...

  7. 【Leetcode | 02】二叉树、线性表目录

    二叉树 序号 题号 1 94. 二叉树的中序遍历 2 95. 不同的二叉搜索树 II 3 96. 不同的二叉搜索树 4 98. 验证二叉搜索树 5 100. 相同的树 6 101. 对称二叉树 7 1 ...

  8. LeetCode Python实现 二叉树简单部分

    LeetCode Python实现 二叉树简单部分 ''' 1 二叉树的最大深度 给定一个二叉树,找出其最大深度.二叉树的深度为根节点到最远叶子节点的最长路径上的节点数.说明: 叶子节点是指没有子节点 ...

  9. 二叉树层次遍历c语言_每日一道 LeetCode (23):二叉树的层次遍历 II

    ❝ 每天 3 分钟,走上算法的逆袭之路. ❞ 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub:https://github.com/meteor1993/LeetCode Gi ...

最新文章

  1. 输出控制台信息到日志 并 通过cronolog对tomcat进行日志切分
  2. 用matlab实现假设性检验T检验(葡萄酒评价)
  3. javascript Date
  4. 计算机学科技术前沿:云计算主要平台及特性
  5. html网页代码入门,html 网页入门(示例代码)
  6. 鸡啄米VS2010/MFC编程入门教程系列
  7. 遥感原理与应用读书笔记(遥感平台、遥感传感器)
  8. spark算子--action篇
  9. killer杀手网卡linux,板载四块Killer网卡,微星Z370 GODLIKE GAMING主板实物图赏
  10. python绘制三维动态柱状图-使用pyecharts模块
  11. 每日新闻:国美与车势达成独家战略合作;腾讯Tsrc年度峰会破界召开;日本将允许高度自动驾驶车上路;“开源芯片”是芯片发展的新潮流...
  12. java notifier_Java Notifier類代碼示例
  13. 到底是人玩了游戏,还是游戏玩了人?----随笔心情
  14. 电子防盗标签 之二:声磁软标签 《转》
  15. 【67】PCIe Power Management和linux对PME的处理
  16. Latex 如何给数学公式进行编号
  17. gpio操作实现人体感应灯(一)
  18. 分享:如何使DFC实现跨平台
  19. Mac干货 如何快速的在Mac上安装Windows双系统?虚拟机Parallels Desktop +Bootcamp安装
  20. python字典的分行实现,字符串操作,购物车代码实现

热门文章

  1. [转]浅谈php web安全
  2. CSS兼容IE6,IE7,FF的技巧
  3. 使用java程序读取配置文件中的相关属性值-asp.net关注
  4. UVA11876 N + NOD (N)【欧拉筛法+前缀和】
  5. POJ3617 Best Cow Line【水题】
  6. web 基本概念辨异 —— URI 与 URL
  7. Python Tricks(二十一)—— 排列组合的计算
  8. 分治法(divide conquer)与动态规划(dynamic programming)应用举例
  9. 解析几何 —— 椭圆
  10. crontab——Linux 下的定时任务