Пишу бинарное дерево. Нужно реализовать удаление узла и всех его дочерних узлов другими словами удалить все поддерево. Я пробовал делать через рекусрию но что-то идет не так как я ожидал. Ошибок нету но работа просто как будто не выполняется. При выводе можно увидеть что все элементы остаются и ничто не удаляется. Код удаления:
template<typename T>
inline void BinTree<T>::deleteSubTree(Node<T>* node)
{
if (node != nullptr)
{
deleteSubTree(node->left);
deleteSubTree(node->right);
node = nullptr;
}
}
Вывод реализован двумя функциями:
template<typename T>
inline void BinTree<T>::print() const
{
if (root == nullptr)
{
cerr << "Error: Tree is empty\n";
return;
}
else {
cout << "Tree :\t";
printNode(root);
cout << endl;
}
}
template<typename T>
inline void BinTree<T>::printNode(Node<T>* node) const
{
if (node != nullptr)
{
printNode(node->left);
cout << node->data << "\t";
printNode(node->right);
}
}
Код структуры узла:
template <typename T>
struct Node
{
T data;
Node* left, * right;
Node(const T& data = T(), Node* left = nullptr, Node* right = nullptr)
: data(data), left(left), right(right)
{}
};
Код класса бинарного дерева:
template <typename T>
class BinTree
{
public:
Node<T>* getRoot() {
return root;
}
BinTree() = default;
void add(const T& data);
bool isEmpty() const;
void print() const;
~BinTree();
bool check(T left, T right, T data);
void deleteSubTree(Node<T>* node);
private:
Node<T>* root = nullptr;
void printNode(Node<T>* node) const;
};
Код main:
int main() {
BinTree<int> tree;
tree.add(56);
tree.add(34);
tree.add(41);
tree.add(65);
tree.add(64);
tree.print();
cout << "\n========================AFTER=DELETION============================\n";
tree.deleteSubTree(tree.getRoot()->left);
tree.print();
}
Скорее всего я неправильно реализовал удаление в коде поетому я надеюсь вы меня исправите.