带有矢量切片的矢量指针,用于从前序和中序向量生成树
Posted
技术标签:
【中文标题】带有矢量切片的矢量指针,用于从前序和中序向量生成树【英文标题】:Vectors pointers with vector slices for Tree generation from preorder and inorder vectors 【发布时间】:2019-04-20 01:45:49 【问题描述】:我收到以下错误:
solution.cpp:在成员函数 buildTree 第 26 行:字符 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)
此标头正在接收一个指向整数向量的指针。
在我的算法中,我试图对输入向量进行切片以仅在递归中使用其中的一部分:
std::vector<int> inorderslice = std::vector<int>(inorder.begin(), inorder.begin() + index);
对于预购向量,我只想剪切前面的元素(索引之前的元素),所以我想我只需传递一个指向该向量元素的指针。
对于中序向量,我想在索引之后剪切元素。
以pythonic的方式,这只是 预购[索引:] 中序[:index]
但我在调用函数时遇到错误。
如何在 C++ 中做到这一点?
谢谢。
【问题讨论】:
【参考方案1】:你的函数需要引用;你在传递指针。
这里对&
的含义存在混淆。
它是任何一个:
按位AND 运算符应用于两个表达式之间时 将“address-of”运算符应用于一个运算符时,会产生一个指针 这就是您在函数调用中所做的事情 添加到类型名称时的“引用” 这就是您在函数参数中添加的内容简而言之,从您的调用中删除 &
,并查看您的 C++ 书中有关使用引用的章节。
此标头正在接收一个指向整数向量的指针。
不,不是。
【讨论】:
这是我最先想到的。事实上,我在开始时没有 &,但没有它我得到这个错误: solution.cpp: no matching function for call to 'Solution::buildTree(__gnu_cxx::__alloc_traits<:allocator>, int>::value_type&, std::vectorT
为vector<T>
,因此对第n 个元素的引用是T&
,而不是vector<T>&
。
&preorder[index]
-- 这是一个int *
,即指向单个int
的指针。你真的应该更熟悉你正在处理的类型。当您拥有的是地址/指针时,您使用术语“参考”。在 C++ 中,引用具有特定的含义,并不意味着“指针”。向量是一个类,它是动态数组的包装器。获取“其中的指针”并不会给您提供“缩减”版本的向量。我认为这就是您使用错误概念编写代码的地方。以上是关于带有矢量切片的矢量指针,用于从前序和中序向量生成树的主要内容,如果未能解决你的问题,请参考以下文章
javaleetcode105.从前序和中序遍历序列构造二叉树