简体   繁体   English

BST预订删除

[英]BST pre-order deletion

I would like to know if it is possible to free an entire binary search tree in preorder mode. 我想知道是否可以在预购模式下释放整个二进制搜索树。 I've got this function: 我有这个功能:

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

I don't think this works, freeing the first leaf of the tree wont let me recall preorder, right? 我认为这行不通,释放树的第一片叶子不会让我想起预订单,对吗?

You should record left and right locally to avoid accessing freed pointer after free(*tree) . 您应该记录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);
 }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM