binärer suchbaum



  • hallo, hab folgende aufgabenstellung bekommen und komm einfach nicht weiter....
    könnte sich jemand das mal ansehen und mir evtl. anstöße geben??

    danke im voraus...

    struct knoten {int info; knoten *plinks, *prechts;};
    "knoten" soll Baumknoten einer Klasse "baum" für einen binären Suchbaum werden, die
    lediglich aus 3 privat zugänglichen und 2 öffentlich zugänglichen Methoden besteht. Die öffentlich
    zugänglichen Methoden umfassen
    - einen Default-Konstruktor
    - eine Ausgabefunktion print(), die dafür sorgt, das eingegebene und im Baum abgelegte
    Zahlen in aufsteigend sortierter Folge ausgegeben werden.
    Die nur privat zugänglichen Methoden umfassen
    - eine Methode addKnoten() zum Hinzufügen eines Knoten mit einer von der Eingabe
    eingelesenen Zahl
    - eine Methode zur Herstellung eines geeigneten Durchlaufs mit Aufsuchen der Baumknoten.
    Insgesamt soll die Klasse baum so in ein Anwendungsprogramm eingebettet werden, dass folgendes
    Konsolenfenster den Aufruf bzw. Ablauf der Anwendung bspw. protokolliert:
    Gib das vollständige Programm mit der Klasse "baum" und einem Hauptprogrammabschnitt an.

    mfg sigint



  • Die Klasse 'baum' benötigt einen 'knoten' als Wurzel und kann sich dann über dessen plinks und prechts Zeiger durch die komplette Struktur durchhangeln.

    sigint schrieb:

    - einen Default-Konstruktor

    sollte eigentlich trivial sein.

    - eine Ausgabefunktion print(), die dafür sorgt, das eingegebene und im Baum abgelegte
    Zahlen in aufsteigend sortierter Folge ausgegeben werden.

    Das löst du am besten rekursiv - erst den linken Teilbaum ausgeben, dann den Inhalt der (Teil)Wurzel und anschließend den rechten Teilbaum.
    (daß die Knoten sortiert sind, sicherst du bereits beim Einfügen)

    - eine Methode addKnoten() zum Hinzufügen eines Knoten mit einer von der Eingabe
    eingelesenen Zahl

    Du hangelst dich stückweise nach unten duch den Baum und vergleichst das einzufügende Element jeweils mit dem Inhalt des aktuellen Knotens - ist es kleiner, gehst zu nach links, ist es größer, gehst du nach rechts. Wenn du keinen Nachbarn in der Richtung mehr hast, bist du unten und kannst einen neuen Knoten mit dem eingegebenen Wert erstellen und einhaken.

    - eine Methode zur Herstellung eines geeigneten Durchlaufs mit Aufsuchen der Baumknoten.

    Was will uns dieser Satz sagen?

    PS: Wieso soll die addKnoten()-Methode eigentlich privat sein? Irgendwo von außen mußt du doch die Methode aufrufen, um neue Elemente einzufügen.

    PPS: Sagtest du nicht etwas von 3 privaten Methoden?



  • danke für die schnelle antwort..

    ok konstruktor ist noch einfach.
    initialisiere ich die wurzel im konstruktor?
    wie bitte implementiere ich die struct in meine klasse?
    steh echt grad voll am schlauch.

    ich greif dann praktisch über die struct auf meine knoten und deren inhalte zu oder?
    😕 😕 😮 😕
    die aufgabe war so gegeben von unserem prof.



  • sigint schrieb:

    ok konstruktor ist noch einfach.
    initialisiere ich die wurzel im konstruktor?

    Ja (das wäre zumindest eine gute Idee)

    wie bitte implementiere ich die struct in meine klasse?

    Du gibst der Klasse ein Element von deinem Struct-Typ, das du dann intern ganz normal verwenden kannst (class ist, abgesehen vom Default-Zugriffslevel, identisch mit struct).
    [cpp]class baum
    {
    knoten wurzel;
    public:
    baum() {wurzel.info=0;wurzel.prechts=NULL;wurzel.plinks=NULL;}
    ...
    };

    ich greif dann praktisch über die struct auf meine knoten und deren inhalte zu oder?

    Ja.

    die aufgabe war so gegeben von unserem prof.

    Dann frag mal deinen Prof, was er mit dem "geeigneten Durchlauf" meinte 😉



  • danke super des hilft mir schon enorm weiter 👍 😃

    ich denke, wenn ich die sortierung schon beim einfügen sicherstelle, dass ein inorder-durchlauf die lösung des problems wäre....

    vielen dank nochmal.... 😉


Anmelden zum Antworten