如何在节点中插入字符串(由用户输入)? (二叉搜索树)

How to insert a string in a node (as entered by the user)? (Binary Search Tree)

我正在尝试使用 C 创建二叉搜索树。我需要做的是在节点中插入一个 id(仅数字)并将同一节点与名称(字符串)相关联。使用此 ID,我可以使用 InOrder Searching 显示树。

问题是,我得到了(感谢互联网)要插入的号码,进行 InOrder 搜索。

我没有做的是将字符串与节点相关联,即我无法存储名称。我确实在链接列表中找到了执行相同操作的答案,但我似乎不理解代码。请帮帮我。

我发现的是 memset() {我不知道那是什么}并且不知何故我应该使用 stringcpy {我知道这个,但不知道如何应用它}

我的结构代码:

struct node
{
    int employeeid;
    struct node *left;
    struct node *right;
    char employeename[100];
}*temp=NULL,*link=NULL;

在我的函数中,我尝试插入名称,但出现错误:

    printf("Enter the employee name: ");
    gets(name);
    temp = (struct node *)malloc(sizeof(struct node));
    temp->employeeid = data;
    temp->employeename = name;
    temp->left = temp->right = NULL;

出错的代码行: temp->employeename = name;

错误:

error: assignment to expression with array type

我所期望的显然是 运行 的代码。请帮忙。

不能对数组使用 = 运算符。您需要使用 strcpystrncpymemcpy 等函数。并且您需要确保 employeename 以 null 结尾。

我强烈建议您使用 fgets 而不是 gets。事实上,你可能永远不应该使用 getsfgets 将处理空终止(假设缓冲区 name 不大于 employeename)并且不会溢出您的缓冲区。

不要忘记检查 malloc return 值。您想正确处理错误而不是在错误发生时崩溃。

使用 fgets,进行一些错误处理和 BUFF_SIZE = 100:

temp = (struct node *)malloc(sizeof(struct node));
if (temp == NULL)
{
    printf("Malloc has failed\n");
    return (-1);
}
printf("Enter the employee name: ");
fgets(name, BUFF_SIZE, stdin);
temp->employeeid = data;
strcpy(temp->employeename, name);
temp->left = temp->right = NULL;

编辑:

stdin 是标准输入。简而言之,这通常是您在终端中使用键盘输入的文本。这就是 scanfgets 在不询问您的情况下使用的内容。请记住,我用这个解释偷工减料。

BUFF_SIZE 是表示常量值的便捷方式。设置它的最佳方法是在程序顶部使用这样的定义:

# define BUFF_SIZE 100

int all_your_function()
{
...

这在您需要时非常有用:

  • 为特定数字起一个有意义的名称(这样您的程序更易于阅读)
  • 在你的整个程序中修改这个数字(只覆盖一个地方)