Keresés

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

  • Azazel999

    csendes tag

    válasz Azazel999 #1996 üzenetére

    Nos, erre jutottam, de futtatáskor a vektoromból kifutok a számlálással valamiért:

    void Fa::vag(Fa* v_pont){
    vector<Fa*> kicsik;
    vector<Fa*> nagyok;
    Fa *aktualis = this, *kovetkezo;
    //fa szétdarabolása
    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;
    } else if (aktualis->kulcs > v_pont->kulcs){
    nagyok.push_back(aktualis);
    kovetkezo = aktualis->bal;
    aktualis->bal->apa = NULL;
    aktualis->bal = NULL;
    }
    }
    //vágási elem gyrekeinek levágása
    if (aktualis->bal != NULL){
    kicsik.push_back(aktualis->bal);
    kovetkezo = aktualis->jobb;
    aktualis->jobb->apa = NULL;
    aktualis->jobb = NULL;
    } else if (aktualis->jobb != NULL){
    nagyok.push_back(aktualis->jobb);
    kovetkezo = aktualis->bal;
    aktualis->bal->apa = NULL;
    aktualis->bal = NULL;
    }
    //a kisebb- és nagyobb fa felépítése
    for(int i = 1; i < kicsik.size(); i++){
    kicsik.at(0)->beszur(kicsik.at(i));
    }
    for(int j = 1; j < nagyok.size(); j++){
    nagyok.at(0)->beszur(nagyok.at(j));
    }
    //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;
    }

    [ Szerkesztve ]

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