Проблема в том, что вы объявляете несколько переменных, которые существуют только внутри каждого содержащего условного блока. Объявите переменную в верхней части функции или в верхней части блока else
. Затем установите эту же переменную в каждом условном блоке кода.
BSTree Delete(BSTree t, int item) {
BSTree new_item;
if (item < t->value) {
t->left = Delete(t->left, item);
} else if (item > t->value) {
t->right = Delete(t->right, item);
} else {
// deleting item
if (t->left == NULL && t->right == NULL) {
new_item = NULL;
} else if (t->left == NULL) {
new_item = t->right;
} else if (t->right == NULL) {
new_item = t->left;
// } else {
//BSTree new = joinTrees(t->left, t->right);
}
free(t);
t = new_item;
}