我正在编写一个程序,如果你愿意,它会读入“学生记录”,然后根据数据将其分成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'的成员 . 我确信我只是遗漏了一些小东西,但我不知道它是什么 . 有任何想法吗?
2 回答
更改
成
同样的权利 . 如果你真的希望函数采用
**
,这是值得怀疑的 . 当你没有实际删除时,*
也可以正常工作 .对于第二个错误,您很可能在
struct treeNode
中有SREC
类型的成员 . 您必须中缀该成员名称,例如(*treePtr)->R.SID
.这些错误意味着他们所说的 .
deleteNode
的第一个参数是TreeNodePtr *
类型,又名struct treeNode **
,但是你传递(*treePtr)->leftPtr
,类型为TreeNodePtr
,又名struct treeNode *
. 你引用(* treePtr) - > SID但是没有struct treeNode
这样的成员 .您也应该收到错误
因为treePtr指向一个指向
struct treeNode
的指针,但是指针却向后倾斜't have members. And why is your 570199 flag called 570200 ? That' . 将其称为deleted
,或将其设置为0并将其初始化为1.前者更好 .你的
key
参数是什么?你永远不会使用它 .假设
TreeNode
包含一个名为R
的SREC
和一个deleted
标志,这可能会有效: