[英]Vectors pointers with vector slices for Tree generation from preorder and inorder vectors
我收到以下错误:
solution.cpp:在成员函数buildTree第26行:Char 62:错误:没有匹配函数来调用'Solution :: buildTree(__ gnu_cxx :: __ alloc_traits,int> :: value_type *,std :: vector *)'root-> left = buildTree(&preorder [index],&inorderslice); ^
在这段代码中:
class Solution {
public:
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
if(preorder.empty() || inorder.empty())
return NULL;
if(preorder.size() == 1) // preorder and inorder should always have the same length
{
TreeNode *node = new TreeNode(preorder[0]);
return node;
}
// current root is the first entry of preorder
TreeNode *root = new TreeNode(preorder[0]);
// find the index of this number in inorder
std::vector<int>::iterator it = std::find(inorder.begin(), inorder.end(), preorder[0]);
int index = std::distance(inorder.begin(), it);
std::vector<int> inorderslice = std::vector<int>(inorder.begin(), inorder.begin() + index);
root->left = buildTree(&preorder[index],&inorderslice); // This line is a problem
root->right = buildTree(&preorder[index+1],&inorder[index+1]); // This line is a problem
return root;
}
};
我正在尝试解决一个问题,从它的预订和顺序遍历向量生成一个树。
我试图以递归方式执行此操作但是我遇到了匹配执行递归的函数的变量类型的问题。
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
此标头正在接收指向int向量的指针。
在我的算法中,我试图将输入向量切片为仅在我的递归中使用它的一部分:
std::vector<int> inorderslice = std::vector<int>(inorder.begin(), inorder.begin() + index);
对于预订矢量我只想剪切前面的元素(索引前的元素),所以我想我只是传递指向该元素的向量。
对于inorder向量我想剪切AFTER索引后的元素。
以pythonic方式,这只是预订[index:] inorder [:index]
但是我在调用函数时遇到错误。
我如何在C ++中执行此操作?
谢谢。
你的功能需要参考; 你正在传递指针。
关于什么&
手段,这里有一个混乱。
它是以下任何一个:
简而言之,从您的调用中删除&
,并查看C ++手册中有关使用引用的章节。
此标头正在接收指向int向量的指针。
不,不是。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.