rendered paste body#include <conio.h>#include <stdio.h>#include <string.h>#include <stdlib.h>typedef struct int_n{ int l; struct int_n *a[27]; char key[20];}intern_nod;void regasire(intern_nod *rad,char new_key[20]){intern_nod *next,*index,*data;int i;next=rad;if(next==NULL){ printf("\n inregistrare lipsa"); exit(1);}else index=next;i=0;while((index->l==1)&&(index->a[new_key[i]-'a']!=NULL)){ next=index->a[new_key[i]-'a']; index=next; i++;}if(next==NULL)printf("\n inregistrare lipsa");else{ data=next; if(!strcmp(data->key,new_key)) printf("\n inregistrare=%s\n",data->key); else if(!strcmp(data->a[26]->key,new_key)) printf("\n inregistrare=%s\n",data->a[26]->key); else printf("\n inregistrare lipsa");}}intern_nod *NewFrunza(char n_key[20]){intern_nod *p;int i;p=new intern_nod;for(i=0;i<=27;i++) p->a[i]=NULL;p->l=0;strcpy(p->key,n_key);return p;}intern_nod *NewIntern(){intern_nod *p;int i;p=new intern_nod;for(i=0;i<=27;i++)p->a[i]=NULL;p->l=1;return p;}intern_nod *insert(intern_nod *rad,char new_key[20]){intern_nod *next,*index,*parent;intern_nod *new_leaf,*data;intern_nod *new_index;intern_nod *salv1,*salv2;intern_nod *at;int i,j;next=rad;if(next==NULL){ rad=NewIntern(); new_leaf=NewFrunza(new_key); rad->a[new_key[0]-'a']=new_leaf; return rad;}else index=next;i=0;while((index->l==1)&&(index->a[new_key[i]-'a']!=NULL)){ parent=next; next=index->a[new_key[i]-'a']; index=next; i++;}if((index->a[new_key[i]-'a']==NULL)&&(index->l==1)){ new_index=NewFrunza(new_key); index->a[new_key[i]-'a']=new_index; return rad;}else data=next;if(!strcmp(data->key,new_key)) printf("\n inregistrarea exista!");else{ salv1=parent->a[new_key[i-1]-'a']; salv2=NewFrunza(new_key); j=strlen(new_key); if(strlen(data->key)<j) j=strlen(data->key);}while((i<=j)&&(data->key[i-1]==new_key[i-1])){ at=NewIntern(); parent->a[new_key[i-1]-'a']=at; parent->l=1; parent=at; i++;}i--;if((i!=j)||((i==j)&&(strlen(new_key)==strlen(data->key)))){ parent->a[data->key[i]-'a']=salv1; parent->a[new_key[i]-'a']=salv2;}elseif(strlen(data->key)<=j){ parent->a[26]=salv1; parent->a[new_key[j]-'a']=salv2;}else{ parent->a[26]=salv2; parent->a[new_key[j]-'a']=salv1;}return rad;}void afisare_arb(intern_nod *rad,int nivel){ int i; if (rad!=0) if(rad->l==0) { for(int j=0;j<nivel;j++) printf(" "); printf("%s",rad->key); } else for (i=26;i>=0;i--) afisare_arb(rad->a[i],nivel+1);} void main(){intern_nod *rad;char ch[20],c;rad=NULL;do{ printf("\n introduceti cuv de inserat:"); gets(ch); rad=insert(rad,ch); regasire(rad,ch); printf("\n continuati?"); c=getch();}while(c!='n');do{ printf("\n 1Inserare, 2Cautare, 3Afisare sau 4 Exit?"); c=getch(); switch(c) { case'1':printf("\n dati cuv de inserat:"); gets(ch); insert(rad,ch); break; case '2':printf("\n introd cuv de cautat:"); gets(ch); regasire(rad,ch); break; case'3':printf("\n"); afisare_arb(rad,0);break; case '4':exit(1); default:printf("\n eroare!!!"); }}while(c!='4');}