Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа2

.CPP
Скачиваний:
14
Добавлен:
01.05.2014
Размер:
3.38 Кб
Скачать
#include<stdio.h>
#include<malloc.h>
#include<conio.h>

struct tree
{tree *root, *left, *right;
 void *info;};

void store(tree *,tree *);
void round(tree* );
void del(tree *);
void clear(tree *);
void view2level(tree *);
void del2level(tree *);
void printtree(tree *,int,int,int);

void main()
{int i,count,inf;

 tree *drevo, *newuzel;
 drevo=(tree *)malloc(sizeof(tree));
 drevo->info=drevo->root=drevo->left=drevo->right=NULL;

 clrscr();
 printf("\nP Ў®в  б ¤ҐаҐў®¬ \n");
 printf("\n‡ Ї®«­Ґ­ЁҐ ¤ҐаҐў . ‚ўҐ¤ЁвҐ зЁб«® н«Ґ¬Ґ­в®ў: ");
 scanf("%d", &count);

 for(i=0; i<count; i++)
  {printf("‚ўҐ¤ЁвҐ %d-© н«Ґ¬Ґ­в ¤ҐаҐў : ", i+1);
   scanf("%d", &inf);
   newuzel=(tree *)malloc(sizeof(tree));
   newuzel->root=newuzel->left=newuzel->right=NULL;
   newuzel->info=(void *)inf;
    store(drevo,newuzel);}

 clrscr();
 printf("\n‘®¤Ґа¦Ё¬®Ґ ¤ҐаҐў :\n");
 printtree(drevo,40,wherey(),0);
 printf("\n\n\nЋЎе®¤ ¤ҐаҐў  б­Ё§г ўўҐае:\n");
 round(drevo);
 printf("\n\n“§«л ўв®а®Ј® га®ў­п:\n");
 view2level(drevo);
 getch();

 clrscr();
 printf("\n“¤ «Ґ­ЁҐ 㧫®ў ўв®а®Ј® га®ў­п");
 del2level(drevo);
 printf("\n‘®¤Ґа¦Ё¬®Ґ ¤ҐаҐў :\n");
 printtree(drevo,40,wherey(),0);
 getch();
 clear(drevo);
}

void store(tree *uzel,tree *newuzel)
{if(uzel->info==NULL)
  {uzel->info=newuzel->info;
    return;
  }
 if(newuzel->info<uzel->info)
   if(uzel->left!=NULL)
       store(uzel->left,newuzel);
     else
      {uzel->left=newuzel;
       newuzel->root=uzel;
      }
 if(newuzel->info>uzel->info)
   if(uzel->right!=NULL)
       store(uzel->right,newuzel);
      else
       {uzel->right=newuzel;
	newuzel->root=uzel;}
}

void round(tree* uzel)
{if(uzel==NULL)   return;
 round(uzel->left);
 if(uzel->info!=NULL) printf("%d ",(int)(uzel->info));
 round(uzel->right);
}

void view2level(tree *uzel)
{int i;
 tree *r;
 r=uzel->left->left;
 if (r!=NULL)printf("%d " ,r->info);
 r=uzel->left->right;
 if (r!=NULL)printf("%d " ,r->info);
 r=uzel->right->left;
 if (r!=NULL)printf("%d " ,r->info);
 r=uzel->right->right;
  if (r!=NULL)printf("%d " ,r->info);
}

void del2level(tree *uzel)
{int i;
 tree *r;
 r=uzel->left->left;
 if (r!=NULL)del(r);
 r=uzel->left->right;
 if (r!=NULL)del(r);
 r=uzel->right->left;
 if (r!=NULL)del(r);
 r=uzel->right->right;
  if (r!=NULL)del(r);
}

void del(tree *uzel)
{if(uzel->info==NULL) return;
 if(uzel->root!=NULL)
   {if(uzel->root->left==uzel)
       uzel->root->left=NULL;
     else
       uzel->root->right=NULL;
    if(uzel->left!=NULL)
      store(uzel->root,uzel->left);
    if(uzel->right!=NULL)
      store(uzel->root,uzel->right); }
   else
    if(uzel->left!=NULL)
      {uzel->info=uzel->left->info;
       del(uzel->left); }
     else
       if(uzel->right!=NULL)
	{uzel->info=uzel->right->info;
	 del(uzel->right); }
 uzel->info=NULL;
}

void printtree(tree *uzel,int x,int y,int r)
{int delta=(r<5?(11-2*r):3);
 if(uzel->info==NULL) return;
 gotoxy(x,y);
 printf("%d",(int)uzel->info);
 if(uzel->left!=NULL)
   {gotoxy(x-1,y+1);
    printf("/");
    printtree(uzel->left,x-delta,y+2,r+1); }
 if(uzel->right!=NULL)
   {gotoxy(x+1,y+1);
    printf("\\");
    printtree(uzel->right,x+delta,y+2,r+1);}
}

void clear(tree *uzel)
{free(uzel->left);
 free(uzel->right);
 free(uzel->root);
 free(uzel);
}