6-ma’ruza. Binar daraxtlar


Binar daraxt bo’yicha qidiruv prosedurasi



Yüklə 63 Kb.
səhifə3/6
tarix27.12.2023
ölçüsü63 Kb.
#162366
1   2   3   4   5   6
6-маруза

Binar daraxt bo’yicha qidiruv prosedurasi


Mazkur proseduraning vazifasi shundan iboratki, u berilgan kalit bo’yicha daraxt tuguni qidiruvini amalga oshiradi. Qidiruv operasiyasining davomiyligi daraxt tuzilishiga bog’liq bo’ladi. Haqiqatdan, agar elementlar daraxtga kalit qiymatlari o’sish (kamayish) tartibida kelib tushgan bo’lsa, u holda daraxt bir tomonga yo’nalgan ro’yxat hosil qiladi (chiqish darajasi bir bo’ladi, ya’ni yagona shohga ega), masalan:

Bu holda daraxtda qidiruv vaqti, bir tomonlama yo’naltirilgan ro’yxatdagi kabi bo’lib, o’rtacha qarab chiqishlar soni N/2 bo’ladi.
Agar daraxt muvozanatlangan bo’lsa, u holda qidiruv eng samarali natija

beradi. Bu holda qidiruv
log 2 N
dan ko’p bo’lmagan elementlarni ko’rib chiqadi.



int search(node *tree, int key){ node *next; next=tree; while(next!=NULL) { if (next-
>info==key){cout<<"Binar daraxtda "<if (next->info>key) next=next->left; else next=next->right;
}
cout<<"tuzilmada izlangan element yo’q!!!"<
Qidiruv prosedurasini ko’rib chiqamiz. search o’zgaruvchisiga topilgan bo’g’in ko’rsatkichi o’zlashtiriladi:

Daraxtga yangi element qo’shish prosedurasi


Daraxtga biror bir elementni qo’shishdan oldin daraxtda berilgan kalit bo’yicha qidiruvni amalga oshirish lozim bo’ladi. Agar berilgan kalitga teng kalit mavjud bo’lsa, u holda dastur o’z ishini yakunlaydi, aks holda daraxtga element qo’shish amalga oshiriladi.
Daraxtga yangi yozuvni kiritish uchun, avvalo daraxtni shunday tugunini topish lozimki, natijada mazkur tugunga yangi element qo’shish mumkin bo’lsin. Kerakli tugunni qidirish algoritmi ham xuddi berilgan kalit bo’yicha tugunni topish algoritmi kabi bo’ladi. Biroq berilgan kalit bo’yicha qidiruv prosedurasidan to’g’ridan-to’g’ri (bevosita) foydalanib bo’lmaydi, sababi, qidiruv prosedurasida, qaysi tugunda murojaat NIL (search = nil) bo’lgani fiksirlanmaydi.
Qidiruv prosedurasini shunday modifikasiya qilamizki, qo’shimcha samara sifatida yangi proseduramiz berilgan kalit turgan tugunni fiksirlasin (qidiruv muvofaqiyatli bo’lsa), yoki shunday tugunniki, ushbu tugunni qayta ishlagandan keyin qidiruv yakunlansin (qidiruv muvofaqiyatli bo’lsa).



void add(Node *&root,int t){ if(root==NULL){
Node *p=new Node; p->info=t;
p->left=p->right=NULL; root=p;
return;
}
else{
if(tinfo) add(root->left,t); else add(root->right,t);
}
Daraxtda qo’shilayotgan element kalitiga teng kalitli element yo’q bo’lgan holda elementni qo’shish prosedurasini keltirib o’tamiz.13

13 Adam Drozdek. Data structure and algorithms in C++. Fourth edition. 2013. Chapter 6.


}

Yüklə 63 Kb.

Dostları ilə paylaş:
1   2   3   4   5   6




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©www.genderi.org 2024
rəhbərliyinə müraciət

    Ana səhifə