O’zbekiston respublikasi oliy va o’rta maxsus ta’lim vazirligi toshkent axborot texnologiyalari universiteti


return Daraxtga yangi element qo’shish prosedurasi



Yüklə 18,82 Mb.
səhifə52/162
tarix30.12.2022
ölçüsü18,82 Mb.
#98054
1   ...   48   49   50   51   52   53   54   55   ...   162
МТ Мажмуа МАЪРУЗАЛАР

return 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).
Daraxtda qo’shilayotgan element kalitiga teng kalitli element yo’q bo’lgan holda elementni qo’shish prosedurasini keltirib o’tamiz.
Node *q=NULL;
Node *p=tree;
while(p!=NULL){
q=p;
if(key==p->key){
search=p;
return 0;
}
If(key
key) p=p->left;

else p=p->right;
}
{Berilgan kalitga teng tugun topilmadi, element qo’shish talab qilinadi. Ota bo’lishi mumkin tugunga q ko’rsatkich beriladi.}
node *q=new node;
Qo’yilayotgan yangi element chap yoki o’ng o’g’il bo’lishini aniqlash lozim.
If(keykey) q->left=yangi;
else q->right=yangi;
search=yangi;
return 0;
Binar daraxtdan elementni o’chirish prosedurasi

Tugunni o’chirib tashlash natijasida daraxtning tartiblanganligi buzilmasligi lozim. Tugun daraxtda o’chirilayotganda 3 hil variant bo’lishi mumkin:


1) Topilgan tugun terminal (barg). Bu holatda tugun shunchaki o’chirib tashlanadi.
2) Topilgan tugun faqatgina bitta o’g’ilga ega. U holda o’g’il ota o’rniga joylashtiriladi.
3) O’chirilayotgan tugun ikkita o’g’ilga ega. Bunday holatda shunday qism daraxtlar zvenosini topish lozimki, uni o’chirilayotgan tugun o’rniga qo’yish mumkin bo’lsin. Bunday zveno har doim mavjud bo’ladi:
- bu yoki chap qism daraxtning eng o’ng tomondagi elementi (ushbu zvenoga erishish uchun keyingi uchiga chap shoh orqali o’tib, navbatdagi uchlariga esa, murojaat NIL bo’lmaguncha, faqatgina o’ng shohlari orqali o’tish zarur).
- yoki o’ng qism daraxtning eng chap elementi (ushbu zvenoga erishish uchun keyingi uchiga o’ng shoh orqali o’tib, navbatdagi uchlariga esa, murojaat NIL bo’lmaguncha, faqatgina chap shohlari orqali o’tish zarur).
O’chirlayotgan element chap qism daraxtining eng o’ngidagi element o’chirilayotgan element uchun “Predshestvennik” bo’ladi ( 12 uchun – 11 bo’ladi). Merosxo’r esa o’ng qism daraxtning eng chapidagi tuguni (12 uchun - 13).
Merosxo’rni topish algoritmini ishlab chiqaylik (5.9 chizma).
p – ishchi ko’rsatkich;
q - r dan bir qadam orqadagi ko’rsatkich;
v – o’chiralyotgan tugun merosxo’rini ko’rsatadi;
t - v bir qadam orqada yuradi;
s - v dan bir qadam oldinda yuradi (chap o’g’ilni yoki bo’sh joyni ko’rsatib boradi).



Yuqoridagi daraxt bo’yicha qaraydigan bo’lsak, oxir oqibatda, v ko’rsatkich 13 tugunni, s esa bo’sh joyni ko’rsatishi lozim.
1) Elementni qidirish prosedurasi orqali o’chirilayotgan elementni topamiz. r ko’rsatkich o’chirilanyotgan elementni ko’rsatadi.
2) O’chiriladigan elementni o’rniga qo’yiluvchi tugunga v ko’rsatkich qo’yamiz.
IF left (p)=nil
THEN v=right (p)
ELSE IF right (p)=nil
THEN v=left (p)
ELSE t=p
v=right (p)
s=left (v)
WHILE s<>nil
t=v
v=s
s=left (v)
END WHILE
IF t<>p
THEN WRITE (v element p ning o’g’li emas)
left (t)=right (v)
right (v)=right (p)
END IF
left (v)=left (p)
IF q=nil
THEN WRITE (v ildiz)
tree=v
RETURN
END IF
IF p=left (q)
THEN left (q)=v
ELSE right (q)=v
END IF
END IF
END IF
FREENODE (p) (ushbu prosedura bo’sh tugun hosil qiladi, ya’ni o’chirilgan element joylashgan xotira yacheykasini tozalaydi.)
RETURN



Yüklə 18,82 Mb.

Dostları ilə paylaş:
1   ...   48   49   50   51   52   53   54   55   ...   162




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

    Ana səhifə