2023.7.9
又是一道递归构造二叉树的题,和昨天做的那道题从中序与后序遍历序列构造二叉树类似,5分钟AC了。
大致思路就是通过找到数组中的最大值,并将其作为根节点,然后递归地构建左子树和右子树,最终返回整个最大二叉树的根节点。
直接上代码:
class Solution {
public:
TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
if(nums.size()==0) return NULL;
int max = 0;
int seg;
//找到数组最大值的分割点
for(int i=0; i<nums.size(); i++)
{
if(nums[i] > max)
{
max = nums[i];
seg = i;
}
}
TreeNode* root = new TreeNode(max);
if(nums.size()==1) return root;
//根据分割点将数组分割成左右两数组
vector<int> left_v(nums.begin(),nums.begin()+seg);
vector<int> right_v(nums.begin()+seg+1,nums.end());
//递归构造左右子树
root->left = constructMaximumBinaryTree(left_v);
root->right = constructMaximumBinaryTree(right_v);
return root;
}
};