Я получаю следующую ошибку:
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) {
Этот заголовок получает указатель на вектор целых чисел.
Вмой алгоритм Я пытаюсь нарезать входные векторы, чтобы использовать только его части в моей рекурсии:
std::vector<int> inorderslice = std::vector<int>(inorder.begin(), inorder.begin() + index);
Для вектора предзаказа я просто хочу вырезать элементы впереди (те, что перед индексом),поэтому я подумал, что просто передам указатель на этот элемент вектора.
Для вектора порядка я хочу вырезать элементы ПОСЛЕ индекса.
По-питонски это будет простоpreorder [index:] inorder [: index]
Но я получаю ошибку при вызове функции.
Как мне сделать это в C ++?
Спасибо.