Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Демонстрационные примеры к курсовой по СиАОД / TREEDEMO
.CPP//===== „Ґ¬®бва жЁ® п Їа®Ја ¬¬ : ЋЃ•Ћ„› ¤ҐаҐў =====
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
struct Nd { int d; //‘вагЄвга ¤«п еа ҐЁп 㧫 ¤ҐаҐў
Nd * lft;
Nd * rgt;
} ;
int num=0, //ѓ«®Ў «мл© бзсвзЁЄ ¤«п ўҐаиЁ
offset=40; //Ќ з «м®Ґ ᬥ饨Ґ ¤«п ўл¤ зЁ нЄа
Nd * MakeTree(int level) //=== ‘®§¤ ЁҐ ¤ҐаҐў ў Ї ¬пвЁ ===
//„«п ®Ўе®¤ ¤ҐаҐў : гЎа вм ўлзЁб«ҐЁҐ Ё Їа®ўҐаЄг Y;
// 㬥а жЁо § ¬ҐЁвм ўлў®¤®¬ ®¬Ґа нЄа .
{ Nd * v;
int Y = level < random(7);
// printf("Node %d/%d (1/0):", num, level); scanf("%d", &Y);
if (Y) { //ўҐаиЁ б®§¤ свбп, Ґб«Ё Y=1
v = new Nd;
v->d = ++num; //ЏђџЊЂџ 㬥а жЁп (в® ¦Ґ: "ў Ј«гЎЁг"
v->lft = MakeTree(level+1);
// v->d = ++num; //‚ аЁ в: ўгваҐпп 㬥а жЁп
v->rgt = MakeTree(level+1);
// v->d = ++num; //‚ аЁ в: ®Ўа в п 㬥а жЁп
}
else v = NULL;
return v;
}
void OutTree(Nd * v, int r, int c) //=== ЋЎе®¤ ¤ҐаҐў : ‚л¤ з нЄа ===
{ gotoxy(c, r); printf("%c", v->d+'a'); //‚л¤ з ўҐаиЁл ў в®зЄг (c,r)
if (v->lft) OutTree(v->lft, r+1, c-(offset>>r)); //ЋЎе®¤ «Ґў®Ј® Ї®¤¤ҐаҐў
if (v->rgt) OutTree(v->rgt, r+1, c+(offset>>r)); //’® ¦Ґ, Їа ў®Ј®
}
void BFS (Nd * v) //=== ЋЎе®¤ ¤ҐаҐў "ў иЁаЁг" ===
{ const int MaxQ=10; //ђ §¬Ґа Ї ¬пвЁ ¤«п ®зҐаҐ¤Ё
Nd * QUEUE[MaxQ]; //Џ ¬пвм ¤«п ®зҐаҐ¤Ё
int out=0, in=0; //Ќ®¬Ґа ЇҐаў®Ј® Ё Ї®б«Ґ¤ҐЈ® ў ®зҐаҐ¤Ё
QUEUE[in++] = v; in%=MaxQ; // QUEUE <- v
while (in != out) //Џ®Є ®зҐаҐ¤м Ґ Їгбв ...
{ v = QUEUE[out++]; out %= MaxQ; // v <- QUEUE
printf(" %c", v->d+'a'
); // "ЋЎа Ў®вЄ " ўҐаиЁл v
if (v->lft)
{QUEUE[in++] = v->lft; in%=MaxQ;} // QUEUE <- («Ґўл© бл)
if (v->rgt)
{QUEUE[in++] = v->rgt; in%=MaxQ;} // QUEUE <- (Їа ўл© бл)
}
}
void main()
{ Nd * root;
randomize();
root = MakeTree(0);
clrscr();
if(root) {
OutTree(root, 1, 40);
gotoxy(20,18); printf("ЋЎе®¤ ў иЁаЁг:"); BFS(root);
}
else printf("„ҐаҐў® Їгбв®!");
gotoxy(20,20);
puts("=== The End ==="); getch();
}