Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторная работа2
.CPP#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);
}
Соседние файлы в предмете Программирование