最大二分木
この問題と105および106の違いは、配列
が1つしかないことですが、ルートノードが最大で分割されていることがわかった
ため、2つの配列で決定する必要がないため、構築することもできます。ルートノードを作成し、前と同じように分割します。
class Solution {
public:
TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
return traversal(nums,0,nums.size());
}
TreeNode*traversal(vector<int>&nums,int left,int right)
{
// 左右区间如果没有数就返回空
if(left>=right) return NULL;
//找到分割点的坐标(最大值的坐标
int maxvalueindex=left;
for(int i=left+1;i<right;i++)
{
if(nums[i]>nums[maxvalueindex])
{
maxvalueindex=i;
}
}
//构造二叉树
TreeNode *root=new TreeNode(nums[maxvalueindex]);
//在左边区间找最大的
root->left=traversal(nums,left,maxvalueindex);
//在右边区间找最大的
root->right=traversal(nums,maxvalueindex+1,right);
return root;
}
};