思路:
在给定的数组中找到最大的值作为根节点,然后递归地在左右子序列进行相同的操作来建立子树。
代码:
/**
* 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* constructMaximumBinaryTree(vector<int>& nums) {
return build(nums, 0, nums.size()-1);
}
TreeNode* build(vector<int>& nums, int lo, int hi) {
// base case
if (lo > hi) {
return nullptr;
}
// find the maxVal index in the array
int idx = -1, maxVal = INT_MIN;
for (int i = lo; i <= hi; i++) {
if (maxVal < nums[i]) {
maxVal = nums[i];
idx = i;
}
}
// recursively build
TreeNode* root = new TreeNode(maxVal);
root->left = build(nums, lo, idx-1);
root->right = build(nums, idx+1, hi);
return root;
}
};
记录:
一刷:5.30
二刷:6.9
链接: