Если у вас есть доступ к самому связанному списку, это просто пирог:
// Making liberal assumptions about the kind of naming / coding conventions that might have been used...
ListNode *currentNode = rootNode;
while(currentNode != NULL)
{
ListNode *nextNode = currentNode->Next;
delete currentNode;
currentNode = nextNode;
}
rootNode = NULL;
Если это пользовательская реализация BST, то вполне возможно, что она работает внутренне, если она привязана к определенной структуре данных.
Если у вас нет доступа к внутренним органам, тогда ответ Potatoswatter должен быть точным. Если предположить, что BST настроен так, как они предлагают, то простое удаление корневого узла должно автоматически удалить всю выделенную память, поскольку каждый родительский элемент в дереве будет удалять своих дочерних элементов.
Если вы спрашиваете, как выполнить итерацию по двоичному дереву вручную, то вы должны выполнить следующий рекурсивный шаг:
void DeleteChildren(BSTNode *node)
{
// Recurse left down the tree...
if(node->HasLeftChild()) DeleteChildren(node->GetLeftChild());
// Recurse right down the tree...
if(node->HasRightChild()) DeleteChildren(node->GetRightChild());
// Clean up the data at this node.
node->ClearData(); // assume deletes internal data
// Free memory used by the node itself.
delete node;
}
// Call this from external code.
DeleteChildren(rootNode);
Надеюсь, я здесь не упустил и что-то из этого помогает.