Для BinarySearchTree. На первой итерации вы устанавливаете для нового узла значение NULL на каждой итерации. Было бы лучше сначала проверить значение узла, а затем решить, в каком направлении будет проходить дерево. Когда вы нажмете root, добавьте узел. Что-то вроде следующего.
Примите вход root отдельно, чтобы вы могли сравнить следующий вход.
case 1:
printf("Enter Root Node\n");
scanf(" %d", &tempvalue);
NODE root;
root = (NODE)malloc(sizeof(struct node));
root->data = tempvalue;
while (tempvalue != -1)
{
printf("Enter Node Value\n");
scanf(" %d", &value);
if(value == -1){
break;
}
root = createBinarySearchTree(root, value);
}
return 0;
Затем внутри функции обходите дерево, пока не найдете место, где должен находиться узел go.
NODE createBinarySearchTree(NODE root, int ele)
{
NODE new_node;
new_node = (NODE)malloc(sizeof(struct node));
new_node->data = ele;
if (root == NULL)
return new_node;
NODE curr = root;
while (curr != NULL)
{
printf("%d\n",curr->data);
if(ele < curr->data )
{
if(curr->lchild == NULL){
printf("inserted %d as left child of %d\n",ele,curr->data );
curr->lchild = new_node;
return root;
}
curr=curr->lchild;
}
else if(ele > curr->data)
{
if(curr->rchild == NULL){
printf("inserted %d as right child child of %d\n",ele,curr->data );
curr->rchild = new_node;
return root;
}
curr=curr->rchild;
}
}
return root;
}