654. 最大二叉树 - 力扣(LeetCode) (leetcode-cn.com)
最大二叉树
递归
- 明确: 分治
- 左闭右开原则
- vector使用下标代替分割优化空间
class Solution {
public:
TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
return traversal(nums, 0, nums.size());
}
TreeNode* traversal(vector<int>& nums, int left, int right) {
if (left >= right) return nullptr;
if (right == left + 1) return new TreeNode(nums[left]);
// 左闭右开
int cut = left;
for (int i = left + 1; i < right; ++i) {
if (nums[cut] < nums[i]) cut = i;
}
TreeNode* root = new TreeNode(nums[cut]);
root->left = traversal(nums, left, cut);
root->right = traversal(nums, cut + 1, right);
return root;
}
};