#include<iostream.h>
#include<iomanip.H>
#include<conio.h>
#include<stdlib.h>
int tree[100],data[100];
int insert(int f)
{if(tree[0])
{int i=0;
while(tree[i])
if(data[i]>f) i=i*2+1;
else i=i*2+2;
data[i]=f;tree[i]=1;
}
else {tree[0]=1;
data[0]=f;}
}
void move(int j,int k)
{if(tree[k]!=NULL)
{tree[k]=NULL;
data[j]=data[k];
tree[j]=1;
move(2*j+1,k*2+1);
move(2*j+2,k*2+2);
}
}
void delleft(int i)
{if(tree[2*i+2]!=NULL)
{int j=i*2+1;
while(tree[j*2+2]!=NULL)
j=j*2+2;
if(tree[j*2+1])
{tree[i]=tree[j];
data[i]=data[j];
move(j,j*2+1);}
else
{tree[i]=tree[j];
data[i]=data[j];
tree[j]=NULL;}
}
else {tree[i]=tree[2*i+1];
data[i]=data[2*i+1];
move(i,2*i+1); }
}
void delright(int i)
{tree[i]=tree[2*i+2];
data[i]=data[2*i+2];
move(i,2*i+2);
}
int find(int k)
{int i;
for(i=0;i<=100;i++)
if(tree[i]!=NULL)
if(data[i]==k)
return i;
else continue;
return (-1);
}
void deletetree(int k)
{int i=0;
i=find(k);
if(i>=0)
{if(tree[i*2+1]==NULL && tree[i*2+2]==NULL) tree[i]=NULL;
if(tree[i*2+1]) delleft(i);
else delright(i);
}
else cout<<"ene element alga baina."<<endl;
}
void printtree(int i, int ws) {
if (tree[i]!= NULL) {
printtree(i*2+2, ws+=6);
cout << setw(ws) << data[i] << " " << endl;
printtree(i*2+1, ws);
}
}
void print(int i)
{if(tree[i]!=NULL)
{print(i*2+1);
cout<<" "<<data[i];
print(i*2+2);
}
}
main()
{clrscr();
int item,i,n;
char s;
for(;;)
{cout<<"\n1:insert\n2:printtree\n3:print\n4:delete\n5:exit"<<endl;
cin>>s;
switch(s)
{case'1':{cout<<"oruulah elementiin too:";cin>>n;
for(i=1;i<=n;i++)
{cin>>item;
insert(item);}
}break;
case'2':printtree(0,0);break;
case'3':print(0);break;
case'4':cout<<"ustgah element:";cin>>n;
deletetree(n);break;
case'5':exit(0);break;
}
}
getch();
}
No comments:
Post a Comment