题目

给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:

二叉树的根是数组中的最大元素。
左子树是通过数组中最大值左边部分构造出的最大二叉树。
右子树是通过数组中最大值右边部分构造出的最大二叉树。
通过给定的数组构建最大二叉树,并且输出这个树的根节点。

思路和之前的构造树一样:分成左右区间(子树)递归

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {public:TreeNode* traversal (vector<int>& nums, int numsBegin, int numsEnd) {if (numsBegin == numsEnd) return NULL;//寻找最大数值int maxVal = nums[numsBegin];int delimiterIndex=numsBegin;for(int i=numsBegin;i<numsEnd;i++){if(nums[i]>maxVal){delimiterIndex = i;maxVal=nums[delimiterIndex];}}TreeNode* root = new TreeNode(maxVal);//如果是叶子结点,返回结点if (numsEnd - numsBegin == 1) return root;// for (delimiterIndex = numsBegin; delimiterIndex < numsEnd; delimiterIndex++) {//     if (nums[delimiterIndex] == rootValue) break;// }// 切割nums数组// 左区间,左闭右开[leftInorderBegin, leftInorderEnd)int leftorderBegin = numsBegin;int leftorderEnd = delimiterIndex;// 右区间,左闭右开[rightInorderBegin, rightInorderEnd)int rightorderBegin = delimiterIndex + 1;int rightorderEnd = numsEnd;root->left = traversal(nums, leftorderBegin, leftorderEnd);root->right = traversal(nums, rightorderBegin, rightorderEnd);return root;}TreeNode* constructMaximumBinaryTree(vector<int>& nums) {if(nums.size() == 0) return NULL;return traversal(nums,0,nums.size());}
};

leetcode 654. 构造最大二叉树 思考分析相关推荐

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

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

  2. LeetCode 101. 对称二叉树 思考分析

    题目 给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / 2 2 / \ / 3 4 4 3 但是下面这个 [1,2,2,null,3,null ...

  3. leetcode 17. 电话号码的字母组合 思考分析

    题目 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 思考与递归程序 解空间树的宽度是输入数字对应的字符的个 ...

  4. leetcode 1. 两数之和 思考分析

    1.题目 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同一个元素不能使 ...

  5. leetcode 93. 复原IP地址 思考分析

    题目 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 有效的 IP 地址 正好由四个整数(每个整数位于 0 到 255之间组成,且不能含有前导 0),整数之间用 '.' 分隔. ...

  6. leetcode 216. 组合总和 III 思考分析

    可能需要回顾的文章; leetcode 77. 组合 思考分析 1.题目 找出所有相加之和为 n 的 k 个数的组合.组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字. 说明: ...

  7. LeetCode 404. 左叶子之和思考分析

    题目 计算给定二叉树的所有左叶子之和. 如果是下面的树,只有一个左叶子结点4 思考分析 由此我们可以得到左叶子结点的定义: cur->left !=NULL && cur-> ...

  8. leetcode 106. 从中序与后序遍历序列构造二叉树 105. 从前序与中序遍历序列构造二叉树思考分析

    目录 1.106题目 2.参考思路:递归切割数组 3.105题目 4.同样思路的代码 1.106题目 2.参考思路:递归切割数组 代码参考:公众号:代码随想录 后序数组+中序数组 以 后序数组(左右中 ...

  9. LeetCode 100. 相同的树 思考分析

    给定两个二叉树,编写一个函数来检验它们是否相同. 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的. 示例 1: 输入: 1 1 / \ / 2 3 2 3 [1,2,3], [1,2 ...

最新文章

  1. SAP QM 高阶之Physical Sample Management
  2. 整数数组的定义,然后输入一个整数X,假定X不在这个数组,返回小于X位置的最大数目i而超过X位置的最小数目j...
  3. MySQL事务,这篇文章就够了
  4. += 对于可变对象和不可变对象的区别
  5. linux结课考试试题,Linux认证考试课后基础试题及答案
  6. L3G4200D + ADXL345 卡尔曼滤波
  7. 【Linux应用】udhcpc命令获取到ip后,但是没有生效(没有设置进去)
  8. ERP进销存管理系统,建立企业信息化管理平台
  9. C/C++语言经典、实用、趣味程序设计编程百例精解
  10. 字典攻击—Python
  11. Express 框架的使用(详细)
  12. SQL的DATEDIFF计算天数
  13. 简单理解串行计算、并行计算、分布式计算、网格计算与云计算
  14. ei检索的cpss_我想查EI会议论文检索情况,请问是如何查询的呢?
  15. Seaborn调色板设置
  16. DCloud UniAPP Android 蓝牙连接ESCPOS打印机
  17. 线性模型和非线性模型的区别,以及激活函数的作用
  18. Linux系统编程:树莓派 ds18b20温度获取(文件IO相关操作)
  19. PhotoZoom Pro 7怎么进行参数设置
  20. 正版Matlab安装后激活成功,出现License checkout failed.问题的一种原因!

热门文章

  1. 教你玩转CSS 属性选择器
  2. 如何玩转CSS列表样式?速查!
  3. p服务器不响应,无法加载资源:服务器响应状态为500
  4. 我所知道的前端组件化与模块化
  5. 替换富文本里的px为rem
  6. 【完成发布】Lazy Line Painter – 非常有趣的 jQuery 路径动画插件
  7. 浏览器拦截打开新窗口情况总结
  8. Flexible 弹性盒子模型之CSS justify-content 属性
  9. 网格布局之网格元素放置算法
  10. 位运算实现加减乘除四则运算(Java)