带有矢量切片的矢量指针,用于从预序和顺序向量生成树

Vectors pointers with vector slices for Tree generation from preorder and inorder vectors

本文关键字:向量 生成树 顺序 切片 指针 用于      更新时间:2023-10-16

>我收到以下错误:

解决方案.cpp:在成员函数中构建树 第 26 行:字符 62:错误:调用"解决方案::构建树(__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) {

此标头正在接收指向整数向量的指针。

在我的算法中,我试图对输入向量进行切片,以便在递归中仅使用其中的一部分:

std::vector<int> inorderslice = std::vector<int>(inorder.begin(), inorder.begin() + index);

对于预序向量,我只想剪切前面的元素(索引之前的元素),所以我想我只是传递一个指向向量该元素的指针。

对于顺序向量,我想在索引之后切割元素。

以一种蟒蛇的方式,这只是 预购[索引:] inorder[:index]

但是我在调用函数时遇到错误。

如何在C++中执行此操作?

谢谢。

你的函数接受引用;你正在传递指针。

这里对&的含义存在混淆。

它是以下任何一项:

  • 两个表达式之间应用的按位AND运算符
  • 应用于一个运算符时的"地址"运算符,生成指针
    • 这就是您在函数调用中所做的
  • 添加到类型名称时的"引用"
    • 这是您在函数参数中输入的内容

简而言之,从通话中删除&,并查看C++书中关于使用参考文献的章节。

此标头正在接收指向整数向量的指针。

不,不是。