AMALIY MASHG’ULOT- 11
Mavzu: Binar daraxtlarni tashkil qilish. Binar daraxtlar ustida amallar.
Binar daraxtlar. Daraxt balandligi va ko’ruv .
Ushbu laboratoriya ishida talabalar Binar daraxtlar tushunchasi bilan tanishib
chiqishi hamda daraxt balandligi va binar daraxtlar ustida amallar bajarish
Qo’yilgan masala.
Talabalar topshiriq variantiga mos ravishda binar darxtlar
ustida berilgan amallar bilan ishlash ko’nikmasiga ega bo’lishlari kerak.
•
Tajriba ishi nazariy ma’lumotlarini o‘rganish;
•
Berilgan topshiriqning algoritmini ishlab chiqish;
•
C++ dasturlash muhitida dasturni yaratish;
•
Natijalarni tekshirish;
•
Hisobotni tayyorlash va topshirish.
Daraxtlar:
qatorlar, bog'langanro'yxatlar, Stekvanavbatlardanfarqlio'laroq, bu
chiziqli ma'lumotlar tuzilmalari, daraxtlar ma'lumotlarning ierarxiktuzilmalari.
Daraxtso'zbirikmasi:
engyuqoritugundaraxtningildizidebataladi.
To'g'ridanto'g'ri element ostida bo'lgan elementlar uning bolalari deb ataladi.
To'g'ridan-to'g'ri biron bir narsaning yuqorisidagi
element uning ota-onasi deb
ataladi. Masalan, "a" - "f" ning farzandi, "f" - "a" ning ota-onasi. Va nihoyat, bolalari
bo'lmagan elementlar barglar deb nomlanadi.
Nima uchun daraxtlar?
1.
Daraxtlardan foydalanishning bir sababi
tabiiy ravishda ierarxiyani
shakllantiradigan ma'lumotlarni saqlamoqchi bo'lganligingiz bo'lishi mumkin.
Masalan, kompyuterdagi fayl tizimi:
2.
Daraxtlar (ba'zi
buyurtma bilan, masalan, BST) o'rtacha kirish /
qidirishni ta'minlaydi (bog'langan ro'yxatdan tezroq va massivlardan sekinroq).
3.
Daraxtlar o'rtacha kiritishni / o'chirishni ta'minlaydi (Arraylardan
tezroq va tartibsiz bog'langan ro'yxatlarga qaraganda sekinroq).
4.
bog'langan ro'yxatlar singari va massivlardan farqli o'laroq,
daraxtlar
tugunlar sonining
yuqori chegarasiga ega emas, chunki tugunlar ko'rsatgichlar
yordamida bog'langan.
#include
#include
using namespace std;
class node{
public: int info;
node *left;
node *right;
};
int k=0;
int height(node *tree){
int h1,h2;
if (tree==0) return (-1);
else {
h1 = height(tree->left);
h2 = height(tree-
>right);
if (h1>h2) return (1 +
h1);
else return (1 + h2);
}}
node *new_tree(int
*arr, int start, int end)
{
if(start>end) return 0;
else {
int mid=(start+end)/2;
node *tree=new node;
tree->info=arr[mid];
tree-
>left=new_tree(arr,star
t,mid-1);
tree-
>right=new_tree(arr,m
id+1,end);
return tree;
}
}
void vizual(node
*tree,int l)
{ int i;
if(tree!=0) {
vizual(tree->right,l+1);
for (i=1; i<=l; i++)
cout<<" ";
cout<>info<vizual(tree->left,l+1);
}}
int main()
{ int n,key,s; node
*tree=0,*next=0;
cout<<"n="; cin>>n;
int arr[n];
for(int i=0; inode *p=new node;
node *last=new node;
cin>>s;
p->info=s;
p->left=0;
p->right=0;
if(i==0){tree=p;
next=tree; continue; }
next=tree;
while(1)
{ last=next;
if(p->info>info)next=next->left;
else next=next->right;
if(next==0)break; }
if(p->info>info)last->left=p;
else last->right=p;}
cout<cout<<"\nya'ni\n";
vizual(tree,0);
int h=height(tree);
cout<<"balandligi="<<
h<getch();
}
Xulosa.
Men bu amaliy mashg’ulotda topshirig’imga mos ravishda
binar darxtlar ustida
berilgan amallar bilan ishlash ko’nikmasiga ega boldim. C++ da dasturini tuzdim