Ранее я писал код C для вставки и обхода целочисленных значений в двоичном дереве поиска.Я пытался заставить это работать и для струн.Я сделал несколько изменений, таких как преобразование всех целых чисел в строки, а также добавил функции, такие как strcpy () и strcmp () для обработки строковых операций.Но код, похоже, не работает.Может кто-нибудь объяснить мне, что пошло не так?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct node
{
char *str;
struct node *left;
struct node *right;
};
struct node *root=NULL;
void preorder(struct node *temp)
{
if(temp==NULL)
return;
printf("%s ", temp->str);
preorder(temp->left);
preorder(temp->right);
}
void inorder(struct node *temp)
{
if(temp==NULL)
return;
inorder(temp->left);
printf("%s ", temp->str);
inorder(temp->right);
}
void postorder(struct node *temp)
{
if(temp==NULL)
return;
postorder(temp->left);
postorder(temp->right);
printf("%s ", temp->str);
}
struct node* create(char *str) // Function to create new node
{
struct node *new1;
new1=(struct node*)malloc(strlen(str)+10);
strcpy(new1->str,str);
new1->left=NULL;
new1->right=NULL;
return new1;
}
struct node* insert(struct node *root,char *str) // Function to insert a node
{
if(root==NULL)
{
root=create(str);
}
else if(strcmp(str,root->str)<0)
{
root->left = insert(root->left,str);
}
else if(strcmp(str,root->str)>0)
{
root->right = insert(root->right,str);
}
return root;
}
int main()
{
char *str;
while(1)
{
printf("Enter value to insert: ");
scanf("%s",str);
if(strcmp(str,"-1")==0)
{
break;
}
else
{
root=insert(root,str);
}
}
printf("\nThe values of the BST traversed in PREORDER are: ");
preorder(root);
printf("\nThe values of the BST traversed in INORDER are: ");
inorder(root);
printf("\nThe values of the BST traversed in POSTORDER are: ");
postorder(root);
return 0;
}
Если кто-нибудь сможет исправить это для меня, я буду благодарен.