• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Drzewo BST rotacja całego drzewa

Object Storage Arubacloud
0 głosów
213 wizyt
pytanie zadane 24 maja 2018 w C i C++ przez kikosiak Obywatel (1,010 p.)
edycja 24 maja 2018 przez criss

Cześć, napisałem funkcję rotującą drzewo BST mam tylko problem kiedy chciałbym działać na korzeniu. Poddrzewo lewe czy prawe normalnie rotuje, ale kiedy chcę użyć funkcji na korzeniu program się wywala albo tracę elementy drzewa.Jak mogę to poprawić?

struct tree_node *rotation_left(struct tree_node*root,struct tree_node*R)
{
   struct tree_node *y= (struct tree_node *)malloc(sizeof(struct tree_node));
   if(R->right_child)
   {
   y=R->right_child;
   R->right_child=y->left_child;
   if(y->left_child)
        y->left_child->parent=R;
    y->parent=R->parent;
    if(R->parent==NULL)
        root=y;
    else if(R==R->parent->left_child)
        R->parent->left_child=y;
    else
        R->parent->right_child=y;
    y->left_child=R;
    R->parent=y;
   }
    return R;

};

 

komentarz 24 maja 2018 przez criss Mędrzec (172,590 p.)
Ten malloc w 3. linii to tylko mem leak i nic więcej. Jeśli nie wejdzie w ifa, to wiadomo, a jeśli wejdzie, to w 6. linii masz wyciek.
komentarz 24 maja 2018 przez kikosiak Obywatel (1,010 p.)
usunięcie malloca coś pomoże?
komentarz 24 maja 2018 przez criss Mędrzec (172,590 p.)
W twoim problemie nie, dlatego w komentarzu :P Pomoże tyle, że nie będzie memleaka
komentarz 24 maja 2018 przez kikosiak Obywatel (1,010 p.)
A masz może jakiś pomysł jak mogę rozwiązać ten problem? Jeśli chcesz dam cały kod programu.

1 odpowiedź

0 głosów
odpowiedź 24 maja 2018 przez criss Mędrzec (172,590 p.)
wybrane 24 maja 2018 przez kikosiak
 
Najlepsza
Na pewno ten argument `root` jest bez sensu na ten moment. Skoro chcesz go modyfikować, to powinieneś brać adres roota a nie go kopiować. Tzn. niech funkcja bierze wskaźnik do roota.
Czyli: zamień parametr `root` na `struct tree_node** root`, a w 12. linii dopisz dereferencje `*root = y;`

To powinno rozwiązać problem, tym bardziej, że nie widze żadnego innego błędu..
komentarz 24 maja 2018 przez kikosiak Obywatel (1,010 p.)
Racja doszedłem w końcu do tego nawet bez podwojnego wskaznika. Po prostu nie zmienialem wartosci root w funkcji main. Glupi blad ale dzieki za odp.
komentarz 24 maja 2018 przez kikosiak Obywatel (1,010 p.)

@Criss, A jeśli chodzi o prostowanie drzewa możesz mi podać algorytm?

komentarz 24 maja 2018 przez criss Mędrzec (172,590 p.)
Sorry, ale nie mam pojęcia co to jest prostowanie drzewa :P
komentarz 24 maja 2018 przez kikosiak Obywatel (1,010 p.)
Chodziło mi o przekształcenie drzewa w listę, ale już ogarnąłem

Podobne pytania

0 głosów
1 odpowiedź 259 wizyt
pytanie zadane 24 maja 2018 w C i C++ przez kikosiak Obywatel (1,010 p.)
0 głosów
1 odpowiedź 310 wizyt
pytanie zadane 4 lutego 2020 w C i C++ przez Kate1243 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 727 wizyt
pytanie zadane 2 kwietnia 2019 w C i C++ przez Zielony12 Nowicjusz (200 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...