leetcode 654. 构造最大二叉树 思考分析
题目
给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:
二叉树的根是数组中的最大元素。
左子树是通过数组中最大值左边部分构造出的最大二叉树。
右子树是通过数组中最大值右边部分构造出的最大二叉树。
通过给定的数组构建最大二叉树,并且输出这个树的根节点。
思路和之前的构造树一样:分成左右区间(子树)递归
/*** 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. 构造最大二叉树 思考分析相关推荐
- leetcode 617. 合并二叉树 思考分析
题目 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠. 你需要将他们合并为一个新的二叉树.合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否 ...
- LeetCode 101. 对称二叉树 思考分析
题目 给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / 2 2 / \ / 3 4 4 3 但是下面这个 [1,2,2,null,3,null ...
- leetcode 17. 电话号码的字母组合 思考分析
题目 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 思考与递归程序 解空间树的宽度是输入数字对应的字符的个 ...
- leetcode 1. 两数之和 思考分析
1.题目 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同一个元素不能使 ...
- leetcode 93. 复原IP地址 思考分析
题目 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 有效的 IP 地址 正好由四个整数(每个整数位于 0 到 255之间组成,且不能含有前导 0),整数之间用 '.' 分隔. ...
- leetcode 216. 组合总和 III 思考分析
可能需要回顾的文章; leetcode 77. 组合 思考分析 1.题目 找出所有相加之和为 n 的 k 个数的组合.组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字. 说明: ...
- LeetCode 404. 左叶子之和思考分析
题目 计算给定二叉树的所有左叶子之和. 如果是下面的树,只有一个左叶子结点4 思考分析 由此我们可以得到左叶子结点的定义: cur->left !=NULL && cur-> ...
- leetcode 106. 从中序与后序遍历序列构造二叉树 105. 从前序与中序遍历序列构造二叉树思考分析
目录 1.106题目 2.参考思路:递归切割数组 3.105题目 4.同样思路的代码 1.106题目 2.参考思路:递归切割数组 代码参考:公众号:代码随想录 后序数组+中序数组 以 后序数组(左右中 ...
- LeetCode 100. 相同的树 思考分析
给定两个二叉树,编写一个函数来检验它们是否相同. 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的. 示例 1: 输入: 1 1 / \ / 2 3 2 3 [1,2,3], [1,2 ...
最新文章
- SAP QM 高阶之Physical Sample Management
- 整数数组的定义,然后输入一个整数X,假定X不在这个数组,返回小于X位置的最大数目i而超过X位置的最小数目j...
- MySQL事务,这篇文章就够了
- += 对于可变对象和不可变对象的区别
- linux结课考试试题,Linux认证考试课后基础试题及答案
- L3G4200D + ADXL345 卡尔曼滤波
- 【Linux应用】udhcpc命令获取到ip后,但是没有生效(没有设置进去)
- ERP进销存管理系统,建立企业信息化管理平台
- C/C++语言经典、实用、趣味程序设计编程百例精解
- 字典攻击—Python
- Express 框架的使用(详细)
- SQL的DATEDIFF计算天数
- 简单理解串行计算、并行计算、分布式计算、网格计算与云计算
- ei检索的cpss_我想查EI会议论文检索情况,请问是如何查询的呢?
- Seaborn调色板设置
- DCloud UniAPP Android 蓝牙连接ESCPOS打印机
- 线性模型和非线性模型的区别,以及激活函数的作用
- Linux系统编程:树莓派 ds18b20温度获取(文件IO相关操作)
- PhotoZoom Pro 7怎么进行参数设置
- 正版Matlab安装后激活成功,出现License checkout failed.问题的一种原因!