0

我正在编写一个程序,如果你愿意,它会读取“学生记录”,然后根据数据将其分成 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”的成员。我确定我只是错过了一些小东西,但我不知道它是什么。有任何想法吗?

4

2 回答 2

1

改变

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

进入

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

对的也一样。如果您真的希望该功能能够接受,这是值得怀疑的***当您没有实际删除时,a也可以正常工作。

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

于 2013-04-05T22:21:44.087 回答
0

错误是:注意:预期的“struct treeNode **”但参数类型为“struct treeNode *”错误:“struct treeNode”没有名为“SID”的成员</p>

这些错误正是他们所说的。的第一个参数deleteNode是 type TreeNodePtr *aka struct treeNode **,但是你传递(*treePtr)->leftPtr的是 type TreeNodePtraka struct treeNode *。你引用 (*treePtr)->SID 但没有这样的成员struct treeNode.

你也应该得到一个错误

treePtr->exists = 1;

因为 treePtr 指向一个指向 a 的指针struct treeNode但指针没有成员。为什么您的“已删除”标志称为“存在”?那是倒退。要么调用它deleted,要么将其设置为 0 并将其初始化为 1。前者更好。

你的key参数是什么?你从不使用它。

TreeNode假设包含一个SREC被调用R的和一个deleted标志,这可能会起作用:

void markDeleted(TreeNode* pnode, SREC R)
{
    if (pnode == NULL)
    {
        fprintf(stderr,"Could not locate student with ID.\n");
    }
    else if (R.SID < pnode->R.SID)
    {
        /* search left branch */
        markDeleted(pnode->leftPtr, R);
    }
    else if (R.SID > pnode->R.SID)
    {
        /* search right branch */
        markDeleted(pnode->rightPtr, R);
    }
    else
    {
        /* match */
        pnode->deleted = 1;
    }
}
于 2013-04-05T22:43:49.170 回答