c - 递归删除树的所有节点

标签 c recursion tree

/*
Recursively remove all nodes of the tree
*/
void dispose(node* root)
{
    if (root != NULL)
    {
        dispose(root->left);
        dispose(root->right);
        free(root);
    }
}

我不明白这段代码是如何删除整棵树的。

我看到的是它递归地转到左节点,直到到达空节点,然后转到右节点,然后再次向左移动直到为空,然后向右移动,如果为空,则释放父节点。

它似乎删除了树的最后一片叶子而不是整个树,

如果我弄错了,有人可以像我上面那样解释代码的过程吗?

最佳答案

写出程序执行时将进行的函数调用的顺序会有很大帮助。这是一个示例树:

            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)

关于c - 递归删除树的所有节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51232894/

相关文章:

c - C 中的非法汇编指令

recursion - Prolog 累加器。它们真的是 "different"概念吗?

java - CodingBat split53;对使用返回的正确方法感到困惑

java - 遍历由边表示的树

c - 使用 Mac 终端实用程序时 printf 不返回任何内容

c - 字符串数组,并打印这些元素

c - Valgrind 释放 AVL 树时出错

c++ - 树形图的直径

c++ - 多重间接的限制

algorithm - 为什么这不能递归工作?