/*
Recursively remove all nodes of the tree
*/
void dispose(node* root)
{
if (root != NULL)
{
dispose(root->left);
dispose(root->right);
free(root);
}
}
我不明白这段代码是如何删除整棵树的。
我看到的是它递归地到达左边的节点,直到到达空节点,然后再到达右边的节点,然后再继续向左走直到null,然后再右边,如果右边为null,则释放父节点。
似乎删除了树的最后一片叶子,而不是整个对象,
如果我弄错了,有人可以像我上面解释的那样解释代码的过程吗?
答案 0 :(得分:1)
写出将在程序执行时进行的函数调用顺序很有帮助。这是一个示例树:
A
B C
D E F G
对于这棵树,函数调用的顺序为:
dispose(A)
dispose(B)
dispose(D)
dispose(NULL)
dispose(NULL)
free(D)
dispose(E)
dispose(NULL)
dispose(NULL)
free(E)
free(B)
dispose(C)
dispose(F)
dispose(NULL)
dispose(NULL)
free(F)
dispose(G)
dispose(NULL)
dispose(NULL)
free(G)
free(C)
free(A)