我正在制作一个二叉搜索树,它具有删除树中所有节点的功能。稍后调用时,似乎所有节点都被删除,但根节点除外。在将条件添加到下面的代码之前,还有其他节点没有被删除。此时已修复,但根节点并未被删除。想知道应该添加哪些条件,或者我是否对根删除不了解。
我尝试了一个不使用条件的更简单的解决方案。程序运行良好,但在最后再次调用遍历后,似乎并非所有内容都被删除了。
TreeNodePtr deleteTree(TreeNodePtr node)
{
if(node -> left)
{
deleteTree(node -> left);
printf("Deleting node %s \n", node -> left -> data.word);
free(node -> left);
node -> left = NULL;
}
if(node -> right)
{
deleteTree(node -> right);
printf("Deleting node %s \n", node -> right -> data.word);
free(node -> right);
node -> right = NULL;
}
if(allocation_count == 1)
{
printf("Deleting node %s \n", node -> data.word);
free(node);
node = NULL;
}
//whenever a node is deleted this decreases by one, when at one
//attempt to delete root node
allocation_count--;
return node;
}
所有的删除实例都被打印出来,但根实际上并没有从树中删除。在删除过程之后调用遍历时,会保留一个节点值并打印出来。