为什么';t thins BST代码工作(C)
我很确定search_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
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));