Diskret tuzilmalar” fanidan mustaqil ishi topshirdi: B. A. Nurmatov Qabul qildi: B. Y. Hayitov
Daraxtlarni Prufer usulida kodlash. Daraxtlarni ularning kodi bo'yicha yasash
Download 345.08 Kb.
|
2-Mustaqil ish
- Bu sahifa navigatsiya:
- Daraxtga yangi element qo‘shish funksiyasi
4. Daraxtlarni Prufer usulida kodlash. Daraxtlarni ularning kodi bo'yicha yasash.
Daraxtdan element olib tashlash Daraxt elementini o‘chirish oddiy tuyulishi mumkin, lekin hisobga olish kerak bo‘lgan holatlari mavjud. Algoritmning umumiy ko‘rinishi quyidagicha: Qiymatga mos elementni topish Uni o‘chirish Biz berilgan qiymatga mos qiymatni topganimizdan keyin biz 3- xil holatga duch kelishimiz mumkin. 1 – Holat: O‘chirilishi lozim bo‘lgan elementning o‘ng farzandi mavjud emas. Bu holatda biz, shunchaki chap farzandni o’chirilgan element o’rniga ko’chiramiz. Natijada yuqoridagi daraxt quyidagi ko’rinishga keladi: 2 – Holat: O’chirilishi lozim bo’lgan elementning faqat o’ng farzandi mavjud va o’z navbatida bu farzandning chap tomonida element mavjud emas. Bu holatda o’chirilgan element o’rniga o’ng farzand (6) ko’chiriladi. Natijada daraxt quyidagi ko’rinishga keladi: 3 – Holat: O’chirilayotgan elementning o’ng farzandi mavjud va bu farzandning chap farzandi mavjud: Bu holatda o‘chirilgan element o‘rinini eng chapdagi element egallaydi yaʼni 6. Bunga sabab element o‘chirilganda tuzilma o‘z xususiyatlarini saqlab qolishi zarur yaʼni tugunning chap tomonida undan kichik, o‘ng tomonida esa undan katta qiymat joylashishi kerak. Shunday qilib biz siz bilan binar daraxtdagi eng asosiy ikkita daraxt qurish va undan element o’chirish jarayonlarini o’rgandik. Qidiruv funksiyasini ko’rib chiqamiz. Search funksiyasi daraxtdan key kalitga mos elementning adresini aniqlaydi. 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!!!"< return 0;} Daraxtga yangi element qo‘shish funksiyasi 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 daraxtning 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.Daraxtda qo’shilayotgan element kalitiga teng kalitli element yo’q bo’lgan holda elementni tuzilmaga qo’shish funksiyasini 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, elementning o’zi esa yangi nomli ko’rsatkichi bilan 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; Download 345.08 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling