Я работаю над заданием на C ++. Проект состоит в создании класса шаблона для дерева двоичного поиска.
Пока что я реализовал основные методы и итераторы, и все, кажется, работает просто отлично. Теперь мне нужно реализовать метод subtree(const T &value)
, который, учитывая цель value
, возвращает дерево с value
в качестве корня.
Пока что я определил это:
binarySearchTree subtree(const T &target) {
nodo* node = findValue(target);
binarySearchTree<T> newTree;
newTree._root = node;
return newTree;
}
, где findValue
:
nodo* findValue(const T &target){
if(_root -> value == target) {
return _root;
}
else
return findValueHelper(_root, target);
}
и findValueHelper
:
nodo* findValueHelper(nodo *ptr, const T &val) const {
if (ptr == NULL)
return NULL;
if (val < ptr -> value)
return findValueHelper(ptr -> left, val);
else if (val > ptr -> value)
return findValueHelper(ptr -> right, val);
else
return ptr;
}
и nodo
- это просто моя структура с указателями T value
, left
и right
.
Теперь к проблеме:
Извлеченное поддерево является правильным, но после его печати я получаю ошибку segmentation fault
, несмотря на то, что все элементы отображаются правильно.
В main
я звоню:
binarySearchTree<int> sub = t.subtree(2);
std::cout << sub << std::endl;
И я явно переопределил и operator=
и operator<<
.