为什么';t thins BST代码工作(C)

为什么';t thins BST代码工作(C),c,pointers,C,Pointers,我很确定search_bst的编写是正确的,但是这个函数似乎是禁止的。我做错了什么?对不起,如果这是非常明显的事情,但我是C新手 编辑:以下是搜索内容: void add_bst(struct node **tloc, int k, int v) { struct node *nd; nd = search_bst(*tloc, k); nd = malloc(sizeof(struct node)); nd->key=k; nd->value

我很确定search_bst的编写是正确的,但是这个函数似乎是禁止的。我做错了什么?对不起,如果这是非常明显的事情,但我是C新手

编辑:以下是搜索内容:

void add_bst(struct node **tloc, int k, int v)
{
    struct node *nd;
    nd = search_bst(*tloc, k);
    nd = malloc(sizeof(struct node));
    nd->key=k;
    nd->value=v;
    nd->left=NULL;
    nd->right=NULL;
}
struct node*search\u bst(struct node*t,int k)
{
while(t!=NULL){
如果(t->keyright;
否则,如果(t->key>k)t=t->left;
否则返回t;
}
返回t;
}

您将从以下搜索中获得结果:

struct node *search_bst(struct node *t, int k)
{
    while (t != NULL){
            if (t->key < k) t = t->right;
            else if (t->key > k) t = t->left;
            else return t;
    }
    return t;
}
然后在这里再次指定给nd,这意味着它不再指向上一个结果:

nd = search_bst(*tloc, k);
因此,您将丢弃搜索结果。

您正在搜索

nd = malloc(sizeof(struct node));
然后他们马上扔掉搜索结果

    nd = search_bst(*tloc, k);
你确定这就是你想要的吗?

您也可以将搜索从代码中删除

当您没有提供搜索时,我们如何知道搜索\u bst会做什么?我们如何知道
add\u bst()
应该做什么来找出它做错了什么?那么我应该如何修复它?我正在尝试修改节点搜索\u bst返回结果…现在我看到搜索\u bst,您有一个设计问题。您打算将节点添加到树中。但是search_bst只会在节点已经存在的情况下返回一个节点,如果节点还不存在,它将返回NULL,这不适合添加新节点。抱歉,但是您应该访问并考虑您正在执行的算法;你在这里得到的是“错误的东西”,而不是“有错误的正确的东西”。我非常熟悉递归算法,但作业中说“不允许递归”,因为我们今年刚从functional(Lisp)迁移到命令式。
    nd = malloc(sizeof(struct node));