v tugunning farzandi (agar u mavjud bo‟lsa) v ning otasi bo‟lmish t ga meros
qoldiriladi, ya‟ni v->right v ning o‟rniga keladi. t->left=v->right. Endigi ish p ning
har ikkala tomonidagi tugunlarni v ga o‟zlashtiramiz.
8. Agar t p ga teng bo‟lsa (ya‟ni p o‟chayotgan tugunning o‟rniga o‟zining
88
farzandi kelayotgan bo‟lsa), p ning chapidagi tugunni v ning chapiga
o‟zlashtiramiz.
9. Mana p tugunning o‟rniga v tugun keldi. Endigi vazifa v ni p ning otasi
bilan ulash kerak. Buning uchun aniqlash kerak – p tugunning otasi q NULL ga
teng emasmi? Agar q NULL bo‟lsa, biz daraxt ildizini o‟chirgan bo‟lamiz. Bu
holda daraxt ildizi ko‟rsatkichi tree ni v ga tenglab qo‟yamiz. Aks holda, 10-
qadamga o‟tamiz.
10. p tugun otasi q tugunning qaysi tomonida turgan edi? Agar p q ning
chapida turgan bo‟lsa, p ning o‟rniga, ya‟ni q->left ga v ni joylaymiz, aks holda q-
>right ga v ni joylaymiz.
11. p tugun joylashgan xotira yacheykasini tozalab qo‟yamiz va algoritm
yakunlanadi.
Dastur kodi
#include
#include
using namespace std;
class node{
public: int info;
node *left;
node *right;
};
int intrave(node *tree){
if (tree!=NULL){int a=0, b=0;
if (tree->left!=NULL){ a=tree->left->info; }
if (tree->right!=NULL){ b=tree->right->info; }
cout<info<<"--chapida=>"<"<
intrave(tree->left);
intrave(tree->right); }
return 0;
}
89
node *del(node *tree,int key){
node *p=new node;
node *next=tree;
node *q=NULL;
while(next!=NULL)
{
if
(next->info==key){cout<<"Binar
daraxtda
"<
Mavjud"<
p=next;break; }
if (next->info>key){ q=next; next=next->left; }
else {q=next;next=next->right;}
}
if(next==NULL) cout<<"tuzilmada izlangan element yo‟q!!!"<
node *v=NULL,*t=NULL,*s=NULL;
if(p->left==NULL) v=p->right;
else if(p->right==NULL) v=p->left;
if((p->left!=NULL)&&(p->right!=NULL)){t=p; v=p->right; s=v->left;}
while(s!=NULL){
t=v;
v=s;
s=v->left;
}
if((t!=NULL)&&(t!=p)){
t->left=v->right;
v->right=p->right;
v->left=p->left;
}
if(t==p) v->left=p->left;
if(q==NULL){
cout<info<<" ildiz\n";
tree=v;
90
delete(p);
return tree;
}
if(p==q->left)
q->left=v;
else q->right=v;
delete(p); // o’chirilgan element joylashgan xotira yacheykasini tozalash
return tree;
}
int main()
{ int n,key,s; node *tree=NULL,*next=NULL;
cout<<"n="; cin>>n;
for(int i=0; i
node *p=new node;
node *last=new node;
cin>>s;
p->info=s;
p->left=NULL;
p->right=NULL;
if(i==0){tree=p; next=tree; continue; }
next=tree;
while(1)
{ last=next;
if(p->infoinfo)next=next->left;
else next=next->right;
if(next==NULL)break; }
if(p->infoinfo)last->left=p;
else last->right=p;}
cout<
intrave(tree);
91
cout<<"delete qilinadigan elementni kiriting \n";
cout<<"key="; cin>>key;
tree=del(tree,key);
intrave(tree);
getch();
}
Dasturning ishlashi natijasi
n=10
8 3 9 12 10 15 13 11 16 14
8—chapida=>3 o’ngida=>9
3—chapida=>0 o’ngida=>0
9—chapida=>0 o’ngida=>12
12—chapida=>10 o’ngida=>15
10—chapida=>0 o’ngida=>11
11—chapida=>0 o‘ngida=>0
15—chapida=>13 o’ngida=>16
13—chapida=>0 o’ngida=>14
14—chapida=>0 o’ngida=>0
16—chapida=>0 o’ngida=>0
delete qilinadigan elementni kiriting
key=12
Binar daraxtda 12 Mavjud
8—chapida=>3 o’ngida=>9
3—chapida=>0 o’ngida=>0
9—chapida=>0 o’ngida=>13
13—chapida=>10 o’ngida=>15
10—chapida=>0 o’ngida=>11
11—chapida=>0 o’ngida=>0
15—chapida=>14 o’ngida=>16
14—chapida=>0 o’ngida=>0
92
16—chapida=>0 o’ngida=>0
Nazorat savollari
1. Daraxtsimon ma‟lumotlar tuzilmasi nima?
2. Binar daraxt tuzilmasi nima va uni tuzishga misol keltiring?
3. Binar daraxti tuzilmasi ustida qanday amallar bajatirilishi mumkin?
4. Binar daraxtini ko‟rikdan o‟tkazish algoritmi qanday?
5. Binar daraxtiga yangi element qo‟shish algoritmini tushuntiring.
6. Binar daraxti elementini o‟chirish algoritmini tushuntiring.
Topshiriq
Variantlar:
1. Talabalar ismlari ketma-ketligidan binar daraxt hosil qilish algoritmi va
dasturini tuzing.
2. Berilgan binar daraxtning terminal tugunlaridan tashkil topgan yangi
muvozanatlangan binar daraxt hosil qilish algoritmi va dasturini tuzing.
3. Berilgan binar daraxtning har bir tuguni chap tomoni tugunlaridan tashkil
topgan muvozanatlangan binar daraxt hosil qilish algoritmi va dasturini tuzing.
4. Daraxt tugunlari haqiqiy sonlar bo‟lsin. Daraxt barcha tugunlarini o‟rta
arifmetigini hisoblash algoritmi va dasturini keltiring.
5. Daraxt tugunlari haqiqiy sonlar bo‟lsin. Yozuvi manfiy bo‟lgan daraxt
tugunlarini o‟chiruvchi dastur tuzing.
6. Daraxt tugunlari haqiqiy sonlar bo‟lsin. Yozuvi berilgan kalit qiymatidan
katta bo‟lgan daraxt tugunlarini o‟chiruvchi dastur tuzing.
7. Berilgan binar daraxtning balandligini aniqlash algoritmi va dasturini
keltiring.
8. Berilgan binar daraxtning har bir juft elementi balandligini aniqlash
algoritmi va dasturini keltiring.
93
9. Berilgan binar daraxtning terminal tugunlari balandliklarini aniqlash
algoritmi va dasturini keltiring.
10. Daraxt tugunlari haqiqiy sonlar bo‟lsin. Daraxt barcha tugunlarini o‟rta
arifmetigiga teng qiymatli tugunni berilgan binar daraxtga kiritish algoritmi va
dasturini keltiring.
11. Berilgan binar daraxtning oraliq tugunlaridan tashkil topgan yangi binar
daraxt tuzish algoritmi va dasturini keltiring.
12. Berilgan binar daraxtdan kalitlari o‟sish tartibida joylashgan bir
bog‟lamli ro‟yhat hosil qilish algoritmi va dasturini keltiring.
13. Binar daraxtning barcha barglari yozuvini chop etuvchi dastur ishlab
chiqing.
14. Binar daraxtning barcha oraliq tugunlari yozuvini chop etuvchi dastur
ishlab chiqing.
15. Binar daraxtning juft qiymatli kalitga ega elementlaridan yangi daraxt
qurish algoritmi va dasturini keltiring.
16. Binar daraxtning tugunlari sonini aniqlashning algoritmi va dasturini
keltiring.
17. Binar daraxtda berilgan tugungacha bo‟lgan masofani aniqlashning
algoritmi va dasturini keltiring.
18. Bo‟sh bo‟lmagan binar daraxtning eng katta va eng kichik kalitli
tugunlarini aniqlashning algoritmi va dasturini keltiring.
19. T1 va T2 binar daraxtlar tengligini tekshiruvchi dastur tuzing. (Daraxtlar
teng deyiladi, agar ikkala daraxt mos uchlarining yozuv va kalitlari o‟zaro teng
bo‟lsa).
20. Binar daraxtni o‟ngdan chapga va chapdan o‟ngga ko‟rik o‟tkazish
dasturi va algoritmini keltiring.
21. Daraxt tugunlari haqiqiy sonlar bo‟lsin. Yozuvi (a,b) oraliqqa tegishli
bo‟lmagan daraxt tugunlarini o‟chiruvchi dastur tuzing.
94
22. Daraxt tugunlari haqiqiy sonlar bo‟lsin. Yozuvi (a,b) oraliqqa tegishli
bo‟lgan daraxt tugunlarini o‟chiruvchi dastur tuzing.
23. Berilgan binar daraxtdan kalit qiymatlari kamayish tartibida joylashgan
bir bog‟lamli ro‟yhat hosil qilish algoritmi va dasturini keltiring.
24. Bo‟sh bo‟lmagan binar daraxtning eng katta va eng kichik kalitli
tugunlarini o‟rta arifmetigiga teng kalitli tugunni berilgan daraxtga qo‟yish
algoritmi va dasturini keltiring.
25. Berilgan binar daraxtda kalit qiymati ildizning kalit qiymatiga eng yaqin
bo‟lgan tugun kaliti va yozuvini chop etish algoritmi va dasturini keltiring.
26. Berilgan binar daraxtda kalit qiymati ildizning kalit qiymatiga eng uzoq
bo‟lgan tugun kaliti va yozuvini chop etish algoritmi va dasturini keltiring.
27. Butun sonlardan iborat binar daraxtning toq qiymatli tugunlaridan yangi
muvozanatlangan daraxt hosil qiling.
28. Berilgan binar daraxt muvozanatlanganmi yoki yo‟qligini tekshiring.
29. Berilgan muvozanatlangan binar daraxtdan qaysi tugunlar o‟chirilsa,
uning muvozanatlanganligi buzilmasligini ko‟rsatish dasturini tuzing.
30. Berilgan ro‟yhat binar daraxt bo‟la oladimi, yo‟qmi, shuni aniqlash
dasturini keltiring.
|