[C++]Dodanie wszystkich węzłów drzewa bin. do listy

0

Witam!
W jaki sposób dodać wszystkie węzły drzewa binarnego do listy?

Kombinuję tak ale nie bardzo chce to działać:

// Struktura drzewa i listy
struct Tree
{
       int weight;
       int number;
       
       char c;
       
       Tree* parent;
       Tree* left;
       Tree* right;
};

struct List
{
       List* next;
       List* prev;
       
       Tree* t;
};

List* head = 0;
List* tail = 0;

// Dodawanie do listy
void addToList(Tree* t)
{
     List* temp = new List;

     temp->t = t;
     
     temp->next = head;
     temp->prev = 0;
     
     if(head) head->prev = temp;
     head = temp;
     if(!tail) tail = head;        
}

// Tutaj dodaję węzeł do listy
void inOrder(Tree* tw)
{
    if(tw->left)
        inOrder(tw->left);
        
    addToList(tw); 
    
    if(tw->right)
        inOrder(tw->right);    
}

Proszę o pomoc.
Pozdrawiam, Ziem!

0

Funkcje inOrder masz dobrze, z tym ze funkcja dodajaca do listy jest po prostu zla, przeciez musisz znalezc ostatnie element na liscie, zeby dodac nastepny, a jak znajdziesz ostatni jak nie masz petli, chyba ze planujesz dodawac tylko 2 elementy z drzewa ;)

0
t0m_k-tmp napisał(a)

Funkcje inOrder masz dobrze, z tym ze funkcja dodajaca do listy jest po prostu zla, przeciez musisz znalezc ostatnie element na liscie, zeby dodac nastepny, a jak znajdziesz ostatni jak nie masz petli, chyba ze planujesz dodawac tylko 2 elementy z drzewa ;)

Dzięki za odpowiedź.

Ta funkcja dodaje nowy element na początek listy. Skoro mam head to tworzę tymczasowy wskaźnik i przesuwam głowę dalej i potem wszystko odpowiednio zamieniam i mam dodany nowy element na początek. Koniec jest mi nie potrzebny. Chyba, że źle to rozumiem...

0

Nie zauwazylem w pierwszej chwili jak to sobie wykombinowales. na pewno nie powinno sie przypisywac wskaznikom wartosci calkowitych tylko adresy oraz porownujesz w if wskaznik jakby to byla zmienna zwykla, poza tym troche naduzywasz head, ale glebiej sie nad kodem nie zastanawialem. W nie prawidlowym uzyciu wskaznika head doszukiwalbym sie u Ciebie bledu, poniewaz reszta kodu wydaje sie ok.

0
t0m_k-tmp napisał(a)

Nie zauwazylem w pierwszej chwili jak to sobie wykombinowales. na pewno nie powinno sie przypisywac wskaznikom wartosci calkowitych tylko adresy oraz porownujesz w if wskaznik jakby to byla zmienna zwykla, poza tym troche naduzywasz head, ale glebiej sie nad kodem nie zastanawialem. W nie prawidlowym uzyciu wskaznika head doszukiwalbym sie u Ciebie bledu, poniewaz reszta kodu wydaje sie ok.

Dzięki za pomoc.
Poradziłem sobie w inny sposób. Po prostu, kiedy tworzę nowy węzeł dodaję go od razu do listy, bez żadnych inorderów... I działa :).

1 użytkowników online, w tym zalogowanych: 0, gości: 1