내 AVL 트리를 완전히 삭제하는 데 문제가 있습니다. 단일 노드를 삭제하는 방법을 알아 냈습니다. 그러나 내 destroyTree
함수는 실제로 모든 노드를 재귀 적으로 삭제하지는 않습니다. 나는 무엇을 잘못 할 수 있 었는가?전체 AVL 트리를 삭제합니다.
나는 구조체를 nodeType<myType>
template <class myType>
struct nodeType {
myType keyValue;
int nodeHeight;
nodeType<myType> *left;
nodeType<myType> *right;
};
을하고 난 기존의 모든 노드를 삭제하는 것을 시도하고있다 :
if(node != NULL) {
destroyTree(node->left);
destroyTree(node->right);
delete node;
}
node = NULL;
을하지만이 제대로 높이를 검사 할 때, 노드를 삭제하지 않는 것 인쇄를 시도 할 때 크래시가 발생하기 전에도 여전히 높이가 나타납니다.
destroyTree(root);
if(root == NULL)
std::cout << "destroyed" << std::endl;
: 주요 기능은 트리를 파괴 호출 나는이 코드 조각을 (예 인쇄되지 않습니다)
template <class myType>
void avlTree<myType>::destroyTree()
{
destroyTree(root);
if(root == NULL)
std::cout << "destroyed" << std::endl;
}
루트가 null가 아닌 것을 보여준다 if 문 간단한
나에게 잘 보이는,하지만 난'노드 -> left'과'노드 -> right' NULL''을 삭제 한 후 설정하는 것이 좋습니다 것입니다. 노드가 삭제되지 않는다고 생각하는 이유는 무엇입니까? –
이것은 방법입니까? 나는 C++을 기억하지 못한다. 그러나'self.destroyTree'와 같은 것을 말해야 만 하는가? –
@JonathonReinhart 왜냐하면 제로가되어야하지만'destroyTree'를 호출 한 후 내 높이 함수를 호출하면 높이가 나옵니다. –