力扣654:最大二叉树
力扣654:最大二叉树
- 题目
- 思路
- 代码
题目
给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建:
- 创建一个根节点,其值为 nums 中的最大值。
- 递归地在最大值 左边 的 子数组前缀上 构建左子树。
- 递归地在最大值 右边 的 子数组后缀上 构建右子树。
返回 nums 构建的 最大二叉树 。
思路
题目已经把思路给我们了,我们只需要实现对应的函数即可。
代码
/*** 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:TreeNode* recursion(vector<int>& nums, int left, int right) {if (left > right) {return nullptr;}int maxloca = left;for (int i = left + 1; i <= right; i++) {if (nums[maxloca] < nums[i]) {maxloca = i;}}TreeNode* root = new TreeNode(nums[maxloca]);root->left = recursion(nums, left, maxloca - 1);root->right = recursion(nums, maxloca + 1, right);return root;}TreeNode* constructMaximumBinaryTree(vector<int>& nums) {return recursion(nums, 0, nums.size() - 1);}
};