【问题标题】:delete from BST in C从 C 中的 BST 中删除
【发布时间】:2015-11-30 22:00:40
【问题描述】:

我正在尝试在 BST 中创建删除功能。 当我尝试删除指针时,出现此错误。 Click to see the image

void delete(Node** root, int data) {
    if((*root) == NULL)
        return;
    else if(data < (*root)->data)
        delete(&(*root)->left, data);
    else if(data > (*root)->data)
        delete(&(*root)->right, data);
    else {
        printf("%d\n", (*root)->data);
        // case 1
        if((*root)->left == NULL && (*root)->right == NULL) {
            free((*root));
            printf("wssal");
        }
    }

}

Problem view

 [1]: http://i.stack.imgur.com/42K5L.png

【问题讨论】:

  • 您说“这个错误”,但没有描述任何错误。
  • 点击链接“问题视图”
  • 请提供Minimal Complete and Verifiable Example。发布指向外部图像的链接也不是一种好的形式。只需将输出作为文本粘贴到带有描述的问题中。
  • 尝试使用-Wall -Wextra 编译,看看编译过程中是否弹出任何额外的错误。还可以尝试使用诸如GDB 之类的调试器或诸如valgrind 之类的内存调试器来确定错误发生的确切位置。
  • 该链接显示了一堆看起来不是问题或错误的数字。也不清楚上面的代码如何生成该输出。

标签: c binary-search-tree free


【解决方案1】:

您的delete 函数不会更新树结构以反映删除的节点不再在树中的事实。因此,您将离开包含指向不再存在的节点的指针的树。

【讨论】:

  • 完美,我可以让目标节点的父节点删除,这样我可以删除左指针或右指针吗?
  • @XPRO 你可以通过再次走树获得它。或者,您可以通过在每个节点中包含一个指向其父节点的指针来获取它。您可以通过在遍历时对其进行跟踪来获取它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-19
  • 2021-10-23
  • 2013-07-12
  • 2014-05-26
相关资源
最近更新 更多