Hi, BST question I was wondering why my insert function works perfectly to insert file data in the tree but doesnt when i insert single one here is my function int BSTInsert(BST *tree, BSTKey key, BSTValue value) { BSTNode *prev = NULL; BSTNode *cur = tree->Root; // // first we search the tree to see if it already contains key: // while (cur != NULL) { if (BSTCompareKeys(key, cur->Key) == 0) // already in tree, failed: return 0; else if (BSTCompareKeys(key, cur->Key) < 0) // smaller, go left: { prev = cur; cur = cur->Left; } else // larger, go right: { prev = cur; cur = cur->Right; } } // // If we get here, tree does not contain key, so insert new node // where we fell out of tree: // BSTNode *T = (BSTNode *)malloc(sizeof(BSTNode)); T->Key = key; T->Value = value; T->Left = NULL; T->Right = NULL; // // link T where we fell out of tree -- after prev: // if (prev == NULL) // tree is empty, insert @ root: { tree->Root = T; } else if (BSTCompareKeys(key, prev->Key) < 0) // smaller, insert to left: { prev->Left = T; } else // larger, insert to right: { prev->Right = T; } tree->Count++; return 1; // success: } here i insert data from file fgets(buf, sizeof(buf), fp); buf[strcspn(buf, \"\ \ \")] = \'\\0\'; token = strtok(buf, \"\\t\"); y=atoi(token); value.Y = y; token=strtok(NULL, \"\ \"); strcpy(x,token); value.X = (char *)malloc((strlen(x) + 1) * sizeof(char)); strcpy(value.X, x); BSTInsert(tree, value.X, value); while (fgets(buf, sizeof(buf), fp) != NULL) { buf[strcspn(buf, \"\ \ \")] = \'\\0\'; token = strtok(buf, \"\\t\"); y=atoi(token); value.Y = y; token=strtok(NULL, \"\ \"); strcpy(x,token); value.X = (char *)malloc((strlen(x) + 1) * sizeof(char)); strcpy(value.X, x); BSTInsert(tree, value.X, value); } here i insert data from keyboard BSTValue value1; long long int weight; char part2[512]; int part2size = sizeof(part2) / sizeof(part2[0]); // // add weight text // scanf(\"%lld %s\", &weight, phrase); fgets(part2, part2size, stdin); part2[strcspn(part2, \"\ \ \")] = \'\\0\'; // strip EOL char(s): strcat(phrase, part2); value1.Y = weight; value1.X = (char *)malloc((strlen(phrase) + 1) * sizeof(char)); strcpy(value1.X, phrase); BSTInsert(tree, value1.X, value1); if(BSTInsert(tree, value1.X, value1)==1){ printf(\"**Added\ \"); } else { printf(\"**Not dded\ \"); } thanks in advance Solution int BSTInsert(BST *tree, BSTKey key, BSTValue value) { BSTNode *prev = NULL; BSTNode *cur = tree->Root; // // first we search the tree to see if it already contains key: // while (cur != NULL) { if (BSTCompareKeys(key, cur->Key) == 0) // already in tree, failed: return 0; else if (BSTCompareKeys(key, cur->Key) < 0) // smaller, go left: { prev = cur; cur = cur->Left; } else // larger, go right: { prev = cur; cur = cur->Right; } } // // If we get here, tree does not contain key, so insert new node // where we fell out of tree: // BSTNode *T = (BSTNode *)malloc(sizeof(BSTNode)); T->Key = key; T->Value = value; T->Left = NULL; T->Right = NULL; // // link T where w.