c - 删除后打印指针会在括号之间打印 null

标签 c pointers recursion binary-search-tree

我编写了一段代码,递归地查找树中最小的字符串并将其删除。但是,删除节点后打印树会返回 (null)。

static char* findMinimum(TreeNodePtr treePtr){
  if(treePtr->left == NULL){
    printf("Minimum node is %s\n", treePtr->item);
    char * temp = treePtr->item;
    (treePtr)->item = NULL;
    return(temp);
  }
  else{
    findMinimum(treePtr->left);
  }
}

我认为这个函数有效,因为即使使用不同的字符串它也会删除最小值。我应该编写一个条件来确保 NULL 指针不会被打印吗?以防万一,这里还有打印功能:

static void printTree(TreeNodePtr treePtr) {
  if (treePtr != NULL) {
    level++;
    printTree(treePtr->left);
    printf(">%*s%s\n", level*5, "", treePtr->item);
    printTree(treePtr->right);
    level--;
  }
}

最佳答案

我在您的 findMinimum 函数中发现了几个问题:

1) 在 findMinimum 中的 else-case 中返回什么?我猜你忘了添加return:

static char* findMinimum(TreeNodePtr treePtr){
  if(treePtr->left == NULL){
    printf("Minimum node is %s\n", treePtr->item);
    char * temp = treePtr->item;
    (treePtr)->item = NULL;
    free(treePtr->item);
    return(temp);
  }
  else{
    return findMinimum(treePtr->left);  // added return
  }
}

2) 你的树是二叉搜索树吗?考虑一下这种情况下会发生什么:

   root-node
   /       \ 
smallest   largest
    \
   not-smallest

您应该重新挂起 not-smallest 节点,而不是 smallest

3) 为什么要释放NULL

(treePtr)->item = NULL;
free(treePtr->item);

关于c - 删除后打印指针会在括号之间打印 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57927215/

相关文章:

c - 使用malloc两次后为"A heap has been corrupted"

objective-c - 如何使用c中的cons char函数设置 objective-c 标签

c - 我的链接列表中的分配不起作用

java - 数组递归

Python:获取对象的str时的最大递归深度

c - 是否可以使用 'touch' 命令管理间接 .h 依赖项?

c - 如何使用 malloc 在 NASM 程序集中创建一个新的字符数组

ios - 通过引用传递的对象不起作用?

c++ - C++ 中带指针参数的函数

xml - XSLT - 向外递归工作