c二叉树插入函数指针

时间:2014-05-19 08:31:43

标签: c pointers tree

我正在尝试创建一个二叉树程序,其中每个树节点都包含一个'inventory'结构。

我目前在插入函数中出现错误导致编译失败。 我得到的错误是:

left of '.invPartNo' must have class/struct/union
type is 'inventory *'
did you intend to use '->' instead?

这些是我的结构:

//inventory definition
typedef struct inventory
{
    char invName[36];
    int  invPartNo;
    int  invQOH;
    float invUnitCost;
    float invPrice;
}item;

//tree definition
struct btree {
    item *data;
    struct btree *left;
    struct btree *right;
} ;

这是我的插入代码,在那里我使用了 - >,所以我不明白我得到的错误。任何帮助/解释将不胜感激。

struct btree *Insert(btree *node, inventory *i)
{
    if(node == NULL)
    {
        btree *temp;
        temp = (btree *)malloc(sizeof(btree));
        temp->data = i;
        temp->left = temp->right = NULL;
        return temp;
    }
    if(i.invPartNo > node->data->invPartNo) //error here
    {
        node->right = Insert(node->right, i);
    }
    else if(i.invPartNo < node->data->invPartNo) //error here
    {
        node->left = Insert(node->left, i);
    }
    return node;
}

1 个答案:

答案 0 :(得分:2)

i的类型为inventory *,因此您应将i.invPartNo替换为(*i).invPartNo或等效i->invPartNo以解决错误。

运营商.适用于struct objects pointers to struct object。运算符*取消引用指针,取消引用的类型与struct object相同,可在此处使用.。但(*i).memb是免费的,因此C language syntax提供与i->mem相同的快捷方式。