day20
思路:
找到数组中最大值的下标。根据这个下标切割数组,作为参数传递给下一层递归
注意点:
1.使用前序遍历构造二叉树
先构造中间节点,如何递归构造左子树和右子树
2.使用下标来节省开销
3.注意循环时的初始值 left + 1,终止条件是right
4. 设置的区间是左闭右开的
class Solution {
public:
TreeNode* traversal(vector<int> &nums, int left, int right)
{
if(left == right)
return nullptr;
int maxValueInndex = left; // 注意
for(int i = left + 1; i < right; i++)
{
if(nums[i] > nums[maxValueInndex]) maxValueInndex = i;
}
TreeNode* node = new TreeNode(nums[maxValueInndex]);
node->left = traversal(nums, left, maxValueInndex);
node->right = traversal(nums, maxValueInndex + 1, right);
return node;
}
TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
return traversal(nums, 0, nums.size());
}
};