对于构造二叉树的问题,根节点要做的是想办法把自己构造出来(找出
maxValue
),然后对maxValue
左边数组和右边数组进行递归调用,作为root
的左右子树。
先序遍历来解题
/**
* 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) {
if (lo > hi) {
return nullptr;
}
int index = -1, maxValue = INT_MIN;
for (int i = lo; i <= hi; i++) {
if (maxValue < nums[i]) {
index = i;
maxValue = nums[i];
}
}
TreeNode* root = new TreeNode(maxValue);
root->left = build(nums, lo, index - 1);
root->right = build(nums, index + 1, hi);
return root;
}
};