Вероятно, вы должны выполнить обход по порядку, который удаляет дочерние элементы, а затем удаляет корень.Может быть:
void deleteTree(struct tnode *root)
{
if (root != NULL)
{
// ?? delete root->data ??
deleteTree(root->lchild);
deleteTree(root->rchild);
delete root;
}
}
Если вы предпочитаете избегать рекурсивных вызовов, когда указатель равен нулю, вы можете проверить каждый дочерний элемент на нулевое значение, прежде чем вызывать deleteTree()
рекурсивно.Тогда вы можете заменить существующий тест if
утверждением, хотя вам придется беспокоиться о том, что вас попросят удалить пустое дерево (когда при первоначальном вызове deleteTree()
указан нулевой указатель).