Muhammad Al-Xorazmiy nomidagi Toshkent Axborot texnologiyalari universiteti Radio va Mobil aloqa fakulteti Labaratoriya ishi-6



Download 374,14 Kb.
bet3/3
Sana26.02.2022
Hajmi374,14 Kb.
#472469
1   2   3
Bog'liq
MTA6

Binar daraxtdan elementni ochirish funksiyasi

Tugunni o’chirib tashlash natijasida daraxtning tartiblanganligi buzilmasligi lozim.


Tugun daraxtda o’chirilayotganda 3 xil variant bo’lishi mumkin:
1) Topilgan tugun terminal (barg). Bu holatda tugun otasining qaysi tomonida turgan bo’lsa, otasining o’sha tomonidagi shoxi o’chiriladi va tugunning xotirada joylashgan sohasi tozalanadi.
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 shox orqali o’tib, navbatdagi uchlariga esa, murojaat NULL bo’lmaguncha, faqatgina o’ng shoxlari orqali o’tish zarur);
- yoki o’ng qism daraxtning eng chap elementi (ushbu zvenoga erishish uchun keyingi uchiga o’ng shox orqali o’tib, navbatdagi uchlariga esa, murojaat NULL bo’lmaguncha, faqatgina chap shoxlari orqali o’tish zarur).
O’chirlayotgan element chap qism daraxtining eng o’ngidagi element o’chirilayotgan element uchun merosxo’r 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 (4.8-rasmga qarang).
p – ishchi ko’rsatkich;
q - p dan bir qadam orqadagi ko’rsatkich;
v – o’chirilayotgan tugun merosxo’rini ko’rsatadi;
t – v dan bir qadam orqada yuradi;
s - v dan bir qadam oldinda yuradi (chap o’g’ilni yoki bo’sh joyni ko’rsatib boradi).

5.8-rasm. Binar daraxtdan oraliq tugunni o’chirich tartibi

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 funksiyasi orqali o’chirilayotgan elementni topamiz. p ko’rsatkich o’chirilayotgan elementni ko’rsatadi.
2) O’chiriladigan elementning o’rniga qo’yiluvchi tugunga v ko’rsatkich qo’yamiz.
node *del(node *tree,int key){
node *p=new node;
node *next=tree;
node *q=NULL;
while(next!=NULL)
{ if (next->info==key){cout<<"Binar daraxtda "<
if (next->info>key){ q=next; next=next->left; }
else {q=next;next=next->right;}
}
if(next==NULL) cout<<"tuzilmada izlangan element yo’q!!!"<
node *v=NULL,*t=NULL,*s=NULL;
if(p->left==NULL)v=p->right;
else
if(p->right==NULL) v=p->left;
if((p->left!=NULL)&&(p->right!=NULL)){t=p; v=p->right; s=v->left;}
while(s!=NULL){
t=v;
v=s;
s=v->left;
}
if((t!=NULL)&&(t!=p)){
t->left=v->right;
v->right=p->right;
v->left=p->left;
}
if(t==p) v->left=p->left;
if(q==NULL){
cout<info<<" ildiz\n";
tree=v;
delete(p);
return tree;
}
if(p==q->left)
q->left=v;
else q->right=v;
delete(p); // o’chirilgan element joylashgan xotira yacheykasini tozalash
return tree;
}


  1. Daraxt tugunlari haqiqiy sonlar bo’lsin. Yozuvi (a,b) oraliqqa tegishli bo’lmagan daraxt tugunlarini o’chiruvchi dastur tuzing.

Dastur kodi:


#include


using namespace std;
struct node
{
int key;
struct node *left;
struct node *right;
};
node* removeOutsideRange(node *root, int min, int max)
{
if (root == NULL)
return NULL;
root->left = removeOutsideRange(root->left, min, max);
root->right = removeOutsideRange(root->right, min, max);
if (root->key < min)
{
node *rChild = root->right;
delete root;
return rChild;
}
if (root->key > max)
{
node *lChild = root->left;
delete root;
return lChild;
}
return root;
}
node* newNode(int num)
{
node* temp = new node;
temp->key = num;
temp->left = temp->right = NULL;
return temp;
}
node* insert(node* root, int key)
{
if (root == NULL)
return newNode(key);
if (root->key > key)
root->left = insert(root->left, key);
else
root->right = insert(root->right, key);
return root;
}
void inorderTraversal(node* root)
{
if (root)
{
natija( root->left );
cout << root->key << " ";
natija( root->right );
}
}
int main()
{
node* root = NULL;
root = insert(root, 6);
root = insert(root, -13);
root = insert(root, 14);
root = insert(root, -8);
root = insert(root, 15);
root = insert(root, 13);
root = insert(root, 7);
cout << "Natija: ";
natija(root);
root = removeOutsideRange(root, -10, 13);
cout << "\nNatija: ";
natija(root);
return 0;
}



Download 374,14 Kb.

Do'stlaringiz bilan baham:
1   2   3




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