c - BST预购删除

标签 c binary-search-tree preorder

我想知道是否可以在预序模式下释放整个二叉搜索树。我有这个功能:

void preorder_del(struct s_nodo ** tree)
{
     if (*tree != NULL)
        {
          free(*tree);
          preorder_del(&(*tree)->left);
          preorder_del(&(*tree)->right);
        }
}

我认为这行不通,释放树的第一片叶子不会让我记忆起预订,对吧?

最佳答案

您应该在本地记录 leftright 以避免在 free(*tree) 之后访问释放的指针。

 if (*tree != NULL)
 {
      struct s_nodo *l = (*tree)->left;
      struct s_nodo *r = (*tree)->right;
      free(*tree);
      preorder_del(&l);
      preorder_del(&r);
 }

关于c - BST预购删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21630673/

相关文章:

java - 如何遍历所有可能的解决方案路径并选择最佳路径

c - BPF Helper 的 eBPF 隐式声明

c - 将文件的行存储为c中的结构数组

android - 如何使用JNA调用C的_IOR宏?

algorithm - 不保留访问标志的迭代后序遍历

inorder - 订购前和订购后名称

algorithm - 如何根据前序&中序或后序&中序遍历构建非二叉树?

c - switch语句重复错误

c - 使用具有返回类型的递归函数在 C 中进行二分搜索

java - KD-Tree 点重复并给我错误的输出