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;}
};