2. Ko’p o’lchamli daraxtni binar ko’rinishga keltirish
Noformal algoritm:
Daraxtning xar bir tugunida katta o’g’ilga mos chetki chap shoxidan tashqari barcha shoxlari kesib tashlanadi.
Bitta ota barcha o’g’illari gorizontal chiziq bilan ulanadi.
Xosil qilingan tuzilmaning xar bir tugunida katta o’g’il mazkur tugun pastida turgan tugun xisoblanadi (agar u mavjud bo’lsa).
Algoritm amallar ketma-ketligi quyida keltirilgan.
yoki
m-o’lchovli daraxtni binar ko’rinishga keltirish.
3. Daraxtlar ustida bajariladigan amallar
Daraxt ko’ruvi (Obxod dereva).
Qism daraxtni o’chirish.
Qism daraxt qo’yish.
Daraxt ko’ruvini amalga oshirish uchun quyidagi uchta prosedurani bajarish lozim:
Ildizni qayta ishlash.
Chap qismdaraxtni qayta ishlash.
O’ng qismdaraxtni qayta ishlash.
Yuqoridagi prosedura qanday ketma-ketlikda amalga oshirilishiga qarab ko’ruvni uchta ko’rinishga ajratiladi.
Yuqoridan quyiga. Prosedur quyidagi ketma-ketlikda bajariladi A-B-C.
Chapdan o’ng. Prosedur quyidagi ketma-ketlikda bajariladi B-A-C.
Quyidan yuqoriga. Prosedur quyidagi ketma-ketlikda bajariladi B-C-A.
Masalan quyidagi daraxtda ko’ruv o’tkazaylik.
Daraxat ko’ruvi tartibi:
Yuqoridan pastga: A,B,C,D,E,F,G.
Chapdan o’nga: C,D,B,E,F,A,G. Pastdan yuqoriga: D,C,F,E,B,G,A.
Daraxt ko’rigini rekursiv prosedurlari:
int pretrave(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 "<pretrave(tree->left); pretrave(tree->right);
}
return 0;
};
int intrave(node *tree){ if(tree!=NULL) { intrave(tree->left); cout<info; intrave(tree->right);
}
return 0;
};
int postrave(node *tree){ if(tree!=NULL) { postrave(tree->left); postrave(tree->right); cout<info;
}
return 0;
};
Dostları ilə paylaş: |