• 5.6. Binar daraxt bo‘yicha qidiruv funksiyasi
  • Daraxt ko‘rigining rekursiv funksiyalari




    Download 0,91 Mb.
    bet3/11
    Sana17.01.2024
    Hajmi0,91 Mb.
    #139331
    1   2   3   4   5   6   7   8   9   10   11
    Bog'liq
    5-laboratoriya mashg‘uloti Daraxt ma\'lumotlarini tuzilishini o\'r-fayllar.org
    1-topshiriq (2) (6), 2-Laboratoriyaga topshiriq (2) (3), 2, 2 laboratoriya isroilov, 1-topshiriq (4), MICROSOFT WORD, digital-transformation-google-cloud (2), MAMATQULOV MUXAMMADJON, O`zbekiston respublikasi oliy va o`rta maxsus ta’lim vazirligi n-fayllar.org, Elektrolitlar ta\'sirida bo\'ladigan koagulyatsiya-fayllar.org, 11-amaliy ish mavzu Tashkilot risklarini baholash va tahlil qil, 4-uzb-dateline, Axborot xavfsizligi, diskret
    5.5. Daraxt ko‘rigining rekursiv funksiyalari


    1. 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

    pretrave(tree->left);

    pretrave(tree->right);

    }

    return 0;



    };



    1. int intrave(node *tree){



    if(tree!=NULL) {

    intrave(tree->left);

    cout

    intrave(tree->right);

    }

    return 0;



    };



    1. int postrave(node *tree){



    if(tree!=NULL) {

    postrave(tree->left);

    postrave(tree->right);

    cout

    }

    return 0;



    };

    Daraxtning har bir tuguni 5.6-rasmdagidek oraliq (2, 3, 5, 7 elementlar) yoki terminal (daraxt “barg”i) (4, 9, 10, 11, 8, 6 elementlar) bo‘lishi mumkin.


    5.6-rasm. Daraxtsimon tuzilma



    1. Agar tugunning otasi yo‘q bo‘lsa, bu tugun ildiz hisoblanadi. Buni aniqlash uchun dastur kodini keltiramiz. Dasturda p izlanayotgan tugun.


    if(p==tree) cout<<”bu tugun ildiz ekan”;

    else cout<<”bu tugun ildiz emas”;



    1. Biz izlayotgan element daraxtda oraliq tugun ekanligini tekshirish uchun uning yoki o‘ng shoxi, yoki chap shoxi, yoki ikkalasiyam mavjudligini tekshirish kerak. Agar ikkala shoxi NULL dan farqli bo‘lsa, bu 2 ta farzandga ega oraliq tugun hisoblanadi, yoki ikkalasidan bittasi NULL ga teng bo‘lsa, bu tugun 1 ta farzandga ega oraliq tugun hisoblanadi. Berilgan p element daraxtning oraliq tugun ekanligini aniqlash dastur kodini keltiramiz.



    if(p!=tree){

    if((p->left!=NULL)&&(p->right!=NULL)) cout<<”bu tugun 2 ta farzandga ega oraliq tugun”;

    else if((p->left!=NULL)||(p->right!=NULL) cout<<”bu 1 ta farzandga ega oraliq tugun”;

    } else cout<<”bu tugun oraliq tugun emas”;




    1. Biz izlayotgan tugun terminal tugunligini tekshirishni ko‘rib chiqamiz. Agar tugunning har ikkala shoxi NULL ga teng bo‘lsa, bu terminal tugun hisoblanadi. Dastur kodini keltiramiz.



    if((p->left==NULL)&&(p->right==NULL)) cout<<”bu tugun terminal tugun”;

    else cout<<”bu terminal tugun emas”;


    5.6. Binar daraxt bo‘yicha qidiruv funksiyasi



    Mazkur funksiyaning vazifasi shundan iboratki, u berilgan kalit bo‘yicha daraxt tuguni qidiruvini amalga oshiradi. Qidiruv operatsiyasining davomiyligi daraxt tuzilishiga bog‘liq bo‘ladi. Haqiqatdan, agar elementlar daraxtga kalit qiymatlari o‘sish (kamayish) tartibida kelib tushgan bo‘lsa, u holda daraxt 5.7-rasmdagidek bir tomonga yo‘nalgan ro‘yhat hosil qiladi (chiqish darajasi bir bo‘ladi, ya’ni yagona shoxga ega), masalan:


    5.7-rasm. Bir tomonlama yo‘naltirilgan binar daraxt tuzilishi
    Bu holda daraxtda qidiruv vaqti, bir tomonlama yo‘naltirilgan ro‘yhatdagi kabi bo‘lib, o‘rtacha qarab chiqishlar soni N/2 bo‘ladi. Agar daraxt muvozanatlangan bo‘lsa, u holda qidiruv eng samarali natija beradi. Bu holda qidiruv dan ko‘p bo‘lmagan elementlarni ko‘rib chiqadi.
    Qidiruv funksiyasini ko‘rib chiqamiz. search fuksiyasi 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;

    }

    5.7. 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 0,91 Mb.
    1   2   3   4   5   6   7   8   9   10   11




    Download 0,91 Mb.

    Bosh sahifa
    Aloqalar

        Bosh sahifa



    Daraxt ko‘rigining rekursiv funksiyalari

    Download 0,91 Mb.