gpt4 book ai didi

c - 二叉搜索树,删除节点

转载 作者:行者123 更新时间:2023-11-30 15:50:18 24 4
gpt4 key购买 nike

我正在编写一个程序,如果您愿意的话,可以读取“学生记录”,然后根据数据将其分成 4 个二叉搜索树。我正在尝试删除一个节点,但我不想实际删除它,而是想在结构中设置一个标志,这基本上让我知道它已被“删除”。这是我的代码,它给了我几个错误:

 void deleteNode( TreeNodePtr *treePtr, SREC R, unsigned long key)/*ADD HOW*/
{
printf("I got into the delete function.\n");

/*empty*/
if(*treePtr != NULL)
{
if(R.SID<(*treePtr)->SID)/*Not empty*/
{
printf("less than\n");
deleteNode((*treePtr)->leftPtr, R, key);
}
else if(R.SID>(*treePtr)->SID)
{
printf("more than.\n");
deleteNode((*treePtr)->rightPtr, R, key);
}
else
{
treePtr->exists = 1;
printf("Are we deleted yet?\n");
}
}
else
{
fprintf(stderr,"Could not locate student with ID.\n");
}
}

错误是: 注意:预期为“struct treeNode **”,但参数的类型为“struct treeNode *” 错误:“struct treeNode”没有名为“SID”的成员。我确信我只是错过了一些小东西,但我不知道它是什么。有什么想法吗?

最佳答案

改变

deleteNode((*treePtr)->leftPtr, R, key);

进入

deleteNode(&(*treePtr)->leftPtr, R, key);

右侧相同。不过,如果您真的希望该函数采用 ** ,则值得怀疑。当您实际上没有删除时,* 也同样有效。

对于第二个错误,您很可能在 struct treeNode 中有一个 SREC 类型的成员。您必须添加该成员名称,例如(*treePtr)->R.SID.

关于c - 二叉搜索树,删除节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15844347/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com