Я недавно успешно создал BST в C .. Тогда моя попытка была
создать AVL .. Первый шаг в этом. Мы должны были добавить дополнительные
Компонент BF (коэффициент баланса) в каждом узле .. Я сделал это следующим образом.
struct tnode{
int info;
struct tnode*left;
struct tnode*right;
int bf;//new field for avl tree..
};
Каждый раз, когда malloc назначает адрес новому узлу во время вставки ... Я назначаю его информационную часть
значение, введенное пользователем ... установите левый и правый указатель на NULL. В дополнение к этому он назначает bf
нового узла в 0 .. После вставки первого узла (то есть корневого узла) программа завершится неудачно в части malloc в следующий раз
даже назначить память для нового узла ... Как только я удаляю часть, которая говорит newnode-> bf = 0 .. Проблема исчезает ..
Почему это происходит? Ниже приведена моя основная функция и функция add (), которая принимает целое число в качестве входных данных и вставляет его в дерево с корневым узлом как root, объявленным глобально.
int main(){
int choice,val;
deci:
printf("\n1.Insert");
printf("\n2.Display");
printf("\n3.Search.");
printf("\n4.Delete");
printf("\n5.Naa..");
scanf("%d",&choice);
switch(choice){
case 1:printf("\nEnter element to add:");
scanf("%d",&val);
add(val);
//display();
break;
case 2:display();
break;
case 3:printf("\nEnter element to search for:");
scanf("%d",&val);
search(val);
break;
case 4:printf("\nEnter element to Delete: ");
scanf("%d",&val);
deletei(val);
display();
break;
case 5:return 0;
}
goto deci;
return 0;
}
void add(int val){
struct tnode * newnode=(struct tnode * )malloc(sizeof(struct tnode *));
newnode->info=val;
newnode->left=newnode->right=NULL;
newnode->bf=0;//problem making,problem solved removing this statement
if(root==NULL){
root=newnode;
}
else{
struct tnode*tree=root;
struct tnode*ptree=NULL;
while(tree!=NULL){
if(val<tree->info){
ptree=tree;
tree=tree->left;
}
else{
ptree=tree;
tree=tree->right;
}
}
if(val<ptree->info){
ptree->left=newnode;
tree=ptree->left;
}
else{
ptree->right=newnode;
tree=ptree->right;
}
}
}