Monday, March 14, 2011

TreeMass

#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