Kommunikatsiyalarini rivojlantirish vazirligi muhammad al-xorazmiy nomidagi toshkent axborot texnologiyalari universiteti samarqand filiali


int delete(struct tree * search_tree, int ** item)



Download 1,42 Mb.
Pdf ko'rish
bet89/105
Sana23.01.2022
Hajmi1,42 Mb.
#404391
1   ...   85   86   87   88   89   90   91   92   ...   105
Bog'liq
MT C&PhytonQULLANMA

int delete(struct tree * search_tree, int ** item) 

 
struct node ** q,*z; 
 
 
 
q=&search_tree->root; 
 
z=search_tree->root; 
 
//o’chiriladigan elementni qidirish 
 
for(;;) 
 

 
 
if(z == NULL) return 0; 
 
 
else if(item == (int **)z->data) break; 
 
 
else if(item > (int **)z->data) 
 
 

 
 
 
q = &z->right; 
 
 
 
z = z->right; 
 
 

 
 
else 
 
 

 
 
 
q = &z->left; 
 
 
 
z = z->left; 
 
 

 

 
// elementni bevosita o’chirish 


116 
 
 
if(z->right == NULL) *q = z->left; 
 
else 
 

 
 
struct node * y = z->right; 
 
 
if(y->left == NULL) 
 
 

 
 
 
y->left = z->left; 
 
 
 
*q-y; 
 
 

 
 
else 
 
 

 
 
 
struct node * x=y->left; 
 
 
 
while(x->left != NULL) 
 
 
 

 
 
 
 
y = x; 
 
 
 
 
x = y->left; 
 
 
 

 
 
 
y->left = x->right; 
 
 
 
x->left = z->left; 
 
 
 
x->right = z->right; 
 
 
 
*q=x; 
 
 

 

 
search_tree->count --; 
 
free(z); 
 
return 1; 

 
 


117 
 
7.4. Daraxt bo’yicha o’tish – daraxt tugunlarini chop qilish. 
Daraxt  bo’yicha  o’tish  uchun  rekursiyani  qo’llash  mumkin,  chunki, 
ixtiyoriy  binar  daraxt  –  bu  rekursiv  tuzilma  hisoblanadi.  6-listingda  daraxtni 
ixtiyoriy  tugunidan  boshlab  chop  qilish  funktsiyasi  berilgan:  birinchi  chap 
qismdaraxt, keyin o’ng qismdaraxt chop qilinadi. 
Listing 6. Daraxt tugunlari mazmuni chiqarish 
//ixtiyoriy tugunni chop qilish funktsiyasi 
static void walk(const struct node * search_node) 

 
if(node == NDLL) return; 
 
walk(node->left); 
 
printf("%d ", search_node->data); 
 
walk(node->right); 

//daraxtni  ildizi  bilan  to’liq  chop  qilish 
funktsiyasi 
void walk2(const struct tree * my_tree) 

 
walk(my_tree->root); 

Daraxt  bo’yicha  o’tish  uchun  agar  daraxtni  o’tish  vaqtida  to’ldiriladigan 
tugunlar  ko’rsatkichlari  massivi  berilgan  bo’lsa  bitta  funktsiyadan  foydalanish 
mumkin. Daraxt bo’yicha chap tugundan oxirigacha o’tish uchun funktsiyasida 
tarkibli  tsikl  bajariladi.  Qo’shimcha  ko’rsatkichlar  massivi  butun  daraxtni  bitta 
qadamda o’tishga yordam beradi. Bu massivda joriy ildiz tugunning ko’rsatkichi 
saqlanadi.  
Listing 8. Daraxt bo’yicha o’tishning rekursiv bo’lmagan tadbiqi 
void traverse(const struct tree * search_tree) 



118 
 
 
struct node * stack[32]; 
 
int count; 
 
struct node * search_node; 
 
count = 0; 
  search_node = search_tree->root; 
 
 
for(;;) 
 

 
 
while(search_node != NOLL) 
 
 

 
 
 
stack[count++] = search_node; 
 
 
 
search_node = search_node->left; 
 
 

 
 
if(count == 0) return ; 
 
 
search_node = stack[-count]; 
 
 
printf("%d",search_node->data); 
 
 
search_node = search_node->right; 
 


8-listingdaga  stek  qo’llanilgan,  real  holatda  stek  uchun  dinamik  xotira 
ajratiladi. 
 
7.5. Daraxtni o’chirish 
Bu bo’limda daraxtni barglardan boshlab ildiz tugungacha to’liq o’chirish 
funktsiyasi bilan tanishamiz.  
Listing 9. Daraxtni o’chirish funktsiyasi 
//daraxtning alohida tuguni va  
//uning avlodlarini o’chirish funktsiyasi 
static void destroy(struct node * search_node) 


119 
 

 
if(search_node == NOLL) return; 
 
destroy(search_node->left); 
 
destroy(search_node->right); 
 
free(search_node); 
}  
//daraxtni to’liq o’chirish funktsiyasi 
void destroy(struct tree * search_tree) 

 
destroy(search_tree->root); 
 
free(search_tree); 

 
7.6. Binar qidiruv daraxtida minimum va maksimumlarni topish 
10-listingda  daraxtdagi  eng  katta  (maksimum)  va  eng  kichik  (minimum) 
qiymatli tugunlarni qidirish uchun ikkita funktsiya berilgan. Eng kichik qiymatni 
ildizdan chap qism daraxtdan, eng katta qiymatni esa o’ng qism daraxtdan qidirish 
kerak.  
Listing 10. Minimal va maksimal qiymatlarni qidirish funktsiyasi 
struct 
node 

tree_minimum(struct 
tree 

search_tree) 

 
struct node * search_node; 
search_node = search_tree->root; 
 
while (search_node->left != NULL) 
 
 
 
search_node = search_node->left; 
 
return search_node; 



120 
 
struct 
node 

tree_maximum(struct 
tree 

search_tree) 

 
struct node * search_node; 
 
search_node = search_tree->root; 
 
while (search_node->right != NULL) 
 
 
 
search_node = search_node->right; 
 
return search_node; 

 
7.7. Ikkilik daraxtning turini aniqlash 
Berilgan  binar  daraxtning  binar  qidiruv  daraxt  ekanligini  aniqlash  uchun 
11-listingda berilgan funktsiyadan foydalanish. 
Listing 11. Binar daraxtning turini aniqlash 
int isBST(struct node* node)  

return(isBSTUtil(node, INT_MIN, INT_MAX)); 

int isBSTUtil(struct node* node, int min, int max)  

if (node==NULL) return(true); 
if (node->datadata>max) return(false); 
return ( 
 
isBSTUtil(node->left, min, node->data) && 
 
isBSTUtil(node->right, node->data+1, max) 
); 

 
 


121 
 
7.8. Algoritmlarning amaliy tadbiqi 
C tilidagi tadbiqi 
Biz  boshida  binar  daraxtga  10  ta  element  qo’shgan  edik,  buning  uchun 
uning  barcha  atributlarini  tabiiy  ravishda  kuzatib  bordik  –  ya’ni,  masalan, 
daraxtga  element  qo’shish  uchun  uning  joyini  binar  algoritm  bo’yicha  aniqlab 
oldik.  Keyin  daraxt  bo’yicha  o’tish,  daraxtni  chop  qilish,  elementni  o’chirish, 
daraxtni  qayta  chop  qilish,  daraxtni  to’liq  o’chirish  kabi  amallarni  o’rganib 
chiqdik. Binar qidiruv daraxti uchun yuqoridagi barcha amallarni o’zida qamrab 
olgan C tilidagi dastur kodi quyida berilgan:  

Download 1,42 Mb.

Do'stlaringiz bilan baham:
1   ...   85   86   87   88   89   90   91   92   ...   105




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish