繁体   English   中英

C中的BST-元素删除

[英]BST in C - element deletion

编辑:问题并不完全在我最初假设的地方。 提出的问题及其中的代码仅与实际问题部分相关。 请参阅我接受的答案。

我正在做一个作业,其中保留一个用户的BST,该BST根据用户的名称按字母顺序排列。

删除功能使用顺序遍历来根据用户名查找用户,然后将其从树中删除。

作业是在学校系统中测试的,我不知道输入的是什么,只有使用元素删除的测试失败,因为一旦系统再次请求树内容,我将返回错误的名称。 我已经花了几个小时了,我无法弄清楚我在做什么错。

相关代码:

//User struct
struct user{
  char name[100];
  int height;
  struct user* left;
  struct user* right;
};


//finds the leftmost child of a node
struct user* minUser(struct user* user)
{
    struct user* min = user;
    while (min->left != NULL)
        min = min->left;
    return min;
}


//recursive delete function 
struct user* delete(struct user *root, char *name){
  if (root == NULL)
    return NULL;
  int compare = strcmp(name,root->name);
  if (compare<0){
    root->left = delete(root->left,name);
  }
  else if (compare>0){
   root->right = delete(root->right,name); 
  }
  else {
    //If node has only one child
    if (root->left == NULL){
      struct user* temp = root->right;
      free(root);
      return temp;
    } else if (root->right == NULL){
      struct user* temp = root->left;
      free(root);
      return temp;
    }
    //If node has both children. I suspect the error to be here most likely
    struct user* temp = minUser(root->right);

    strcpy(root->name, temp->name);
    //root->height = temp->height;
    root->right = delete(root->right, strdup(temp->name));
  }
  return root;
}

问题不在于我最初假设的地方。 它在结构定义中包含char name [100];。 当我将其更改为char * name指针并在插入新用户时为其动态分配内存时,它通过了测试。

对困惑感到抱歉。

暂无
暂无

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

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