编译以下C ++代码时,
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
TreeNode* construct(vector<int> nums,int start, int end)
{
if(start>end)
return NULL;
int i,index,v = INT_MIN;
for(i=start;i<=end;i++)
if(nums[i]>v)
{
v = nums[i];
index = i;
}
}
TreeNode* root = new TreeNode(v);
root->left = construct(nums,start,index-1);
root->right = construct(nums,index+1,end);
return root;
}
public:
TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
return construct(nums,0,nums.size()-1);
}
};
我收到以下错误:
Line 27: 'root' does not name a type
我有很多关于这个错误的文章,但似乎都没有解决这个问题。 使用 malloc()也不起作用。
谢谢!
答案 0 :(得分:1)
编译器不知道root
变量的类型,因为它的定义已被注释掉。
您也有一个大括号问题,因为for
循环可能需要一个,因为您在if
之后有一个结束。
如下所示,应该这样做。
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
class Solution {
TreeNode* construct(vector<int> nums,int start, int end)
{
if(start>end)
return NULL;
int i,index,v = INT_MIN;
for(i=start;i<=end;i++){ //here a missing brace
if(nums[i]>v)
{
v = nums[i];
index = i;
}
}
TreeNode* root = new TreeNode(v);
root->left = construct(nums,start,index-1);
root->right = construct(nums,index+1,end);
return root;
}
public:
TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
return construct(nums,0,nums.size()-1);
}
};
答案 1 :(得分:0)
因此,提供的示例非常不清楚,但这是代码应该如何格式化。
注意:我目前无法访问编译器来测试它。
在头文件中
Solution.h
// Definition for a binary tree node.
struct TreeNode
{
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Solution
{
public:
Solution();
~Solution();
TreeNode* construct(vector<int> nums,int start, int end);
TreeNode* constructMaximumBinaryTree(vector<int>& nums);
};
在CPP文件中
Solution.cpp
Solution::Solution()
{
// Init any members
}
Solution::~Solution()
{
// Delete any members
}
TreeNode* Solution::construct(vector<int> nums,int start, int end)
{
if(start>end)
return NULL;
int i,index,v = INT_MIN;
for(i=start;i<=end;i++)
{
if(nums[i]>v)
{
v = nums[i];
index = i;
}
}
TreeNode* root = new TreeNode(v);
root->left = construct(nums,start,index-1);
root->right = construct(nums,index+1,end);
return root;
}
TreeNode* Solution::constructMaximumBinaryTree(vector<int>& nums)
{
return construct(nums,0,nums.size()-1);
}