最大二叉樹
阿新 • • 發佈:2021-01-26
技術標籤:傻逼二叉樹
最大二叉樹
這個題與105,106的區別就是隻有一個數組
但是也可以構造因為根節點是找最大的然後進行劃分
所以不需要像之前那樣兩個陣列來確定根節點然後劃分
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;
}
};