题目链接
class Solution {
public:
TreeNode* traver(vector<int> nums, int left, int right) {
if (left >= right) return NULL;
int maxIndex = left;
for (int i = left+1; i < right; i++) {
if (nums[i] > nums[maxIndex])
maxIndex = i;
}
TreeNode* node = new TreeNode(nums[maxIndex]);
node->left = traver(nums, left, maxIndex);
node->right = traver(nums, maxIndex+1, right);
return node;
}
TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
int left = 0;
int right = nums.size();
return traver(nums, left, right);
}
};
![在这里插入图片描述](https://img-blog.csdnimg.cn/43dcd1c015ba4fdeae06fbfaca00b73b.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1N0ZGxlb2hhbw==,size_16,color_FFFFFF,t_70)
总结
- 采用先序遍历
- 左开右闭区间
- 找到最大值的下标maxIndex,构建根节点
- 递归构造左子树、右子树