【发布时间】:2012-03-16 22:47:53
【问题描述】:
用 BST 做一个项目,我的插入函数的某个地方出现了逻辑错误,只是似乎找不到它。
插入函数:
int bst_insert (bst_t *tree, bst_key_t key)
{
bst_node_t *node, *temp_node;
if( tree == NULL ) {
printf("Invalid tree pointer.\n");
return;
}
if( tree->root == NULL ) {
node = (bst_node_t *)malloc(sizeof(bst_node_t));
node->left = node->right = NULL;
node->key = key;
tree->root = node;
return 1;
}
temp_node = tree->root;
while(1) {
if( temp_node == NULL ) {
node = (bst_node_t *)malloc(sizeof(bst_node_t));
node->left = node->right = NULL;
node->key = key;
temp_node = node;
return 1;
}
if( temp_node->key == key ) {
temp_node->data_ptr = data;
return 0;
} else if( key < temp_node->key ) {
temp_node = temp_node->left;
} else if( temp_node->key < key ) {
temp_node = temp_node->right;
}
}
}
在使用这个函数时,插入一个节点就可以了(可能是因为 tree->root 为空,所以它在 if 语句中退出),但是当我尝试插入第二个节点并离开这个函数时,只有树其中有第一个节点。
如果我忘记提供任何相关信息,请告诉我。
【问题讨论】:
-
投票结束:让陌生人通过检查发现代码中的错误是没有效率的。您应该使用调试器或打印语句来识别(或至少隔离)问题,然后返回更具体的问题。
-
我的错,我看看能不能缩小范围。
标签: c pointers tree binary-tree binary-search-tree