Új hozzászólás Aktív témák

  • Azazel999

    csendes tag

    válasz kingabo #1999 üzenetére

    Sikerült! :)

    Ez lett a vágás metódus:
    Fa* Fa::vag(Fa* v_pont){
    vector<Fa*> kicsik;
    vector<Fa*> nagyok;
    Fa *aktualis = this, *kovetkezo;
    //fa szétdarabolása
    int count = 0;
    while (aktualis->kulcs != v_pont->kulcs){
    if (aktualis->kulcs < v_pont->kulcs){
    kicsik.push_back(aktualis);
    kovetkezo = aktualis->jobb;
    aktualis->jobb->apa = NULL;
    aktualis->jobb = NULL;
    cout << "jobbra" << endl;
    } else if (aktualis->kulcs > v_pont->kulcs){
    nagyok.push_back(aktualis);
    kovetkezo = aktualis->bal;
    aktualis->bal->apa = NULL;
    aktualis->bal = NULL;
    cout << "balra" << endl;
    }
    aktualis = kovetkezo;
    }
    cout << "kint vagyok a ciklusbol" << endl;
    //vágási elem gyrekeinek levágása
    if (aktualis->bal != NULL){
    cout << "vagasi_pontnak bal fia van" << endl;
    kicsik.push_back(aktualis->bal);
    aktualis->bal->apa = NULL;
    aktualis->bal = NULL;
    }
    if (aktualis->jobb != NULL){
    cout << "vagasi_pontnak jobb fia van" << endl;
    nagyok.push_back(aktualis->jobb);
    aktualis->jobb->apa = NULL;
    aktualis->jobb = NULL;
    }
    cout << "vagasi pont gyerekei levagva" << endl;
    vector<Fa*>::const_iterator iter;
    //a kisebb- és nagyobb fa felépítése
    for(int i = 1; i < kicsik.size(); ++i){
    cout << "kisfa" << endl;
    kicsik.at(0)->beszur(kicsik.at(i));
    //kicsik.at(i)->kiir();
    }
    for(int j = 1; j < nagyok.size(); ++j){
    cout << "nagyfa" << endl;
    nagyok.at(0)->beszur(nagyok.at(j));
    //nagyok.at(j)->kiir();
    }
    //a vágási pont gyökérré tétele, a két fa ráakasztása
    v_pont->bal = kicsik.at(0);
    v_pont->jobb = nagyok.at(0);
    v_pont->bal->apa = v_pont;
    v_pont->jobb->apa = v_pont;
    //v_pont->kiir();
    return v_pont;
    }

    Bocs, ha nem volt egyértelmű a megfogalmazás, igyekeztem részletesen körülírni. Németh Tamás (SZTE-n tanít) honlapján az alga II. előadásfóliák között ott ez az önszervező bináris keresőfa (nem tudom, hogy szabad-e linkelni ide, ezért nem teszem). Ott folyamatábrával szemlélteti is, az sokkal érthetőbb, mint az én makogásom. Egyébként igazad lehet a rekurzióval, valószínűleg sokkal egyszerűbb lenne vele, de én már ennek is örülök. Ezt a metódust meg kell hívni a fa gyökerére, és a visszaadott érték lesz az új fa.

Új hozzászólás Aktív témák