[C++] BST i pokazywanie ścieżki

Awatar użytkownika
Igor V
Użytkownik
Użytkownik
Posty: 1605
Rejestracja: 16 lut 2011, o 16:48
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 18 razy
Pomógł: 604 razy

[C++] BST i pokazywanie ścieżki

Post autor: Igor V »

Chciałem zrobić proste, iteracyjne drzewo poszukiwań binarnych z opcją dodawania i pokazywania ścieżki do elementu.Działa jednak coś nie tak.Pododawałem masę różnych coutów , żeby w każdym możliwym miejscu kontrolować wartości i wskaźniki.Jak się odpali program to widać w konsoli że dobrze działa dla dwóch pierwszych elementów, natomiast dla trzeciego już coś się sypie (pętla while się nawet chyba nie wykonuje więcej niż raz).

Kod: Zaznacz cały

#include <cstdlib>
#include <iostream>
using namespace std;


class Element
{
    public:
    Element *next_left, *next_right, *prev;
    int number;

    Element()
    {
        next_left=NULL;
        next_right=NULL;
        prev=NULL;
        number=0;
    }

};

class Head
{
    public:
    Element *first;
    int i=0;

    void add(int _number)
    {
        if(first==NULL)
        {
            first=new Element;
            first->number=_number;
            cout << "Element pierwszy" << endl;
        }
        else
        {
            Element *tmp=first;
            Element *prev_;
            cout << "tmp=first" << tmp << endl;

            while(tmp!=NULL)
            {
                prev_=tmp;
                cout << "prev_=tmp" << prev_ << endl;
                if(_number <= tmp->number)
                {
                    tmp=tmp->next_left;
                    cout << "tmp" << tmp << endl;
                    i=0;
                }
                else
                {
                    tmp=tmp->next_right;
                    cout << "tmp" <<tmp << endl;
                    i=1;
                }

            }

                cout << "prev_" << prev_ << endl;
                Element *ptr=new Element;
                ptr->number=_number;
                ptr->prev=prev_;
                cout << "prev" << ptr->prev << endl;
                cout << "i" << i << endl;

                if(i==1)
                {
                    prev_->next_left=ptr;
                   cout << "ptr" << ptr << endl;
                }
                else
                {
                    prev_->next_right=ptr;
                    cout << "ptr" << ptr << endl;
                }
                cout << "---------------------------------------------------" << endl;

        }
    }

    void show(int _number)
    {
        Element *tmp=first;

        cout << tmp->number << endl;

        while(tmp!=NULL&&tmp->number!=_number)
        {

            if(_number <= tmp->number)
                {
                    tmp=tmp->next_left;
                }
                else
                {
                    tmp=tmp->next_right;
                }

        if(tmp!=NULL)
        {
        cout << tmp->number << endl;
        }

        }

    }

    Head()
    {
        first=NULL;
    }
};


int main()
{
    Head h;

    h.add(10);
    h.add(12);
    h.add(5);
    h.add(6);
    h.add(15);
    h.add(1);
    h.add(3);
    h.show(3);


    return 0;
}
Ostatnio zmieniony 18 lis 2015, o 10:49 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[C++] BST i pokazywanie ścieżki

Post autor: Afish »

Tworzysz element po złej stronie rodzica.
Awatar użytkownika
Igor V
Użytkownik
Użytkownik
Posty: 1605
Rejestracja: 16 lut 2011, o 16:48
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 18 razy
Pomógł: 604 razy

[C++] BST i pokazywanie ścieżki

Post autor: Igor V »

O kurde ! A ja tyle nad tym siedziałem.Dzięki za pomoc.
ODPOWIEDZ