我正在尝试在C中为字符串实现BST。 我是C的新手,来自java背景所以请原谅我的错误。 我的节点声明如下所示。
struct node {
char *word;
struct node *left;
struct node *right;
};
static struct node *root = NULL;
然后我尝试简单地将一个节点添加到树的开头 到目前为止,这是我的代码。
int ws_add_word(char *word)
{
int n;
struct node *tmp = root;
// check if word is alrady there
n = strcmp(word, (*tmp)->word);
if (word_tree == NULL){
(*root)->word = word;
return 1;
} else if (n == 0){ //word present
return 1;
} else if(n > 0){ //word bigger add to right
if ((*root)->right == NULL){
(*root)->right = word;
return 1;
}
} else if(n < 0){ //word smaller add to left
if ((*root)->left == NULL){
(*root)->left = word;
return 1;
}
}
// if tree full return false, else true
if (word_count >= tree_size){
return 0;
} else{
return 1;
}
}
如果代码设法插入单词,则代码只需返回1,如果不插入单词,则返回0。
我收到错误:' - &gt;'的无效类型参数(有'struct node')n = strcmp(word,(* tmp) - &gt; word); 看起来它不接受' - &gt;'我不知道如何引用节点中的数据。 当我使用int而不是char进行数字时,它工作得很好。 非常感谢任何帮助。
答案 0 :(得分:2)
a->b
已取消引用a
,您需要的是tmp->word
,
答案 1 :(得分:0)
不看你的逻辑:
如果您有(struct node *)
类型的对象,那么要访问它的成员,您应该执行以下操作之一:
Option 1: (*foo).member
Option 2: foo->member
不是两个。
答案 2 :(得分:0)
小提示: 如果你声明结构使用typedef它会让你的代码变得更漂亮:
typedef struct node_t {
char *word;
struct node *left;
struct node *right;
}; *node;
node root = NULL;