一、题目
二、代码
/**
* 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> & process_vector)
{
if(process_vector.size()==0) return nullptr; //空节点直接返回
int i,j;
int max_index=0;
int max_num=0;
vector<int> left_vector;
vector<int> right_vector;
TreeNode* root=new TreeNode(0); //注意需要用new分配内存空间 不然会报错
for(i=0;i<process_vector.size();i++)
{
std::cout<<" "<<process_vector[i];
if(process_vector[i]>max_num)
{
max_num=process_vector[i];
max_index=i;
}
}
std::cout<<"max_num "<<max_num;
std::cout<<"max_index "<<max_index;
std::cout<<std::endl;
root->val=max_num;
left_vector.assign(process_vector.begin(),process_vector.begin()+max_index); //注意是左闭右开 [) 最大值已经成为节点 所以跳过
right_vector.assign(process_vector.begin()+max_index+1,process_vector.end());
//递归核心 不断拆小vector 等到只有一个节点时 变成分支
root->left=recursion(left_vector);
root->right=recursion(right_vector);
//recursion(process_vector);
return root;
}
TreeNode* constructMaximumBinaryTree(vector<int>& nums)
{
return recursion(nums);
}
};