我们每次递归需要选出一个最大值和最大值对应的下标因为我们需要进行分割
int maxValue = 0;
int maxValueIndex;
for(int i = 0; i < nums.size(); i++) {
if(nums[i] > maxValue) {
maxValue = nums[i];
macValueIndex = i;
}
}
node->val = maxValue;//中
//递归建立左子树
vector vec1(nums.begin(),nums.begin()+maxValueIndex);
node->left = constructMaximumBinaryTree(vec1);
//递归建立右子树
vector vec2(nums.begin()+maxValueIndex+1,nums.size()-1);
node->right = constructMaximumBinaryTree(vec2);
===================================================================
/**
-
Definition for a binary tree node.
-
struct TreeNode {
-
int val;
-
TreeNode *left;
-
TreeNode *right;
-
TreeNode() : val(0), left(nullptr), right(nullptr) {}
-
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
-
TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
-
};
*/
class Solution {
public:
/**
思路:1.这是构造二叉树,我们一般通过前序遍历来构造二叉树
2.我们是通过找到一个最大值,这个最大值的所对应下标的右边是右子树,下标的左边是左子树
3.通过递归构造二叉树
1>:递归函数的参数和返回值
TreeNode* constructMaximumBinaryTree(vector& nums)
(我们返回的是一个指针所以是 TreeNode*类型的)
2>:递归函数的终止条件
如果 数组元素就剩下一个元素,那么的话就可以终止了
if(nums.size() == 1) {
node->val = nums[0];//剩下一个元素就是下标为0的元素了
return node;
}
3>:递归体
我们每次递归需要选出一个最大值和最大值对应的下标因为我们需要进行分割
int maxValue = 0;
int maxValueIndex;
for(int i = 0; i < nums.size(); i++) {
if(nums[i] > maxValue) {
maxValue = nums[i];
macValueIndex = i;
}
}
node->val = maxValue;//中
//递归建立左子树
vector vec1(nums.begin(),nums.begin()+maxValueIndex);
node->left = constructMaximumBinaryTree(vec1);
//递归建立右子树
vector vec2(nums.begin()+maxValueIndex+1,nums.size()-1);
node->right = constructMaximumBinaryTree(vec2);
*/
TreeNode* constructMaximumBinaryTree2(vector& nums) {
TreeNode* node = new TreeNode(0);
if(nums.size() == 1) {
node->val = nums[0];//剩下一个元素就是下标为0的元素了
return node;
}
int maxValue = 0;
int maxValueIndex;
for(int i = 0; i < nums.size(); i++) {
if(nums[i] > maxValue) {
maxValue = nums[i];
maxValueIndex = i;
}
}
node->val = maxValue;//中
//递归建立左子树
if(maxValueIndex > 0){//保证左区间至少一个值
vector vec1(nums.begin(),nums.begin()+maxValueIndex);