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;
}
};
该博客介绍了如何使用递归方法在给定整数数组中构建最大二叉树。核心思路是找到数组中的最大值作为根节点,然后分别对左右子数组递归构建最大二叉树。
390

被折叠的 条评论
为什么被折叠?



