0
用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;
}
}
}
在使用這個功能,插入一個節點工作得很好(大概是因爲樹形>根是空的,所以它退出,如果語句中),但是當我嘗試插入第二個並離開此功能,樹中只有第一個節點。
如果我忘記提供任何相關信息,請告訴我。
投票結束:要求陌生人通過檢查發現代碼中的錯誤並不是富有成效的。您應該通過使用調試器或打印語句來識別(或至少隔離)問題,然後返回一個更具體的問題。 – 2012-03-16 22:59:11
我的錯誤,我會看看我是否可以縮小範圍。 – 2012-03-16 23:17:43