我在完全删除AVL树时遇到问题。我已经找到了如何删除单个节点的方法,但是我的destroyTree
函数似乎并未递归销毁每个节点。我可能做错了什么?
我有一个结构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;
但这似乎并不能正确删除节点,在检查高度时,尽管尝试打印时崩溃,但它仍为我提供了调用destroy之前的高度。在调用destroy tree的主要函数中,我使用了一个简单的if语句
template <class myType>
void avlTree<myType>::destroyTree()
{
destroyTree(root);
if(root == NULL)
std::cout << "destroyed" << std::endl;
}
显示root不是null(不会打印是)
最佳答案
看一下这段代码:
destroyTree(root);
if(root == NULL)
std::cout << "destroyed" << std::endl;
可能您的destroyTree函数具有以下原型(prototype):
void destroyTree(nodeType<myType> *node);
问题在于节点无法更新 call 者的内存地址,而只能更新 call 者指向的内容。这意味着root将永远不会被更新,即其内容不能被更新为NULL。
为此,您需要一个类似以下内容的原型(prototype):
void destroyTree(nodeType<myType> **node);
关于c++ - 销毁整个AVL树,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26132521/