Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: Java ::  Binary Search tree     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
computernerds
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.06.2017
Beiträge: 165
Beitrag computernerds Mitglied 16:48:49 10.11.2017   Titel:   Binary Search tree            Zitieren

Hallo,

kann mir mal einer sagen warum das so nicht geht.
Ich uebergeb einen root Knoten und pruefe dann ob
es sich um einen Binary Search Tree handelt.
Aber mit dem return false das funktioniert leider nicht.
Die Ausgabe wird aber gemacht.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public boolean checkIfBST(Node node)
    {
        if(node==null)
            return true;
       
        if(node.left !=null)
        {
            if(node.left.value > node.value)
            {
                System.out.println("Fehler"); // wird ausgegeben
                return false;//kommt im main nicht an
            }
        }
       
        if(node.right !=null)
        {
            if(node.right.value < node.value)
            {
                return false;
            }
        }
       
        checkIfBST(node.left);
        checkIfBST(node.right);
        return true;
       
    }


Java:
                //Main Programm , Aufruf der Methode
        if(checkIfBST(rootNode) == false)
        {
            System.out.println("Kein BST");
        }


Zuletzt bearbeitet von computernerds am 14:43:55 11.11.2017, insgesamt 1-mal bearbeitet
SG1
Mitglied

Benutzerprofil
Anmeldungsdatum: 19.03.2001
Beiträge: 3163
Beitrag SG1 Mitglied 17:16:13 10.11.2017   Titel:              Zitieren

Du ignorierst den Rückgabewert der rekursiven Aufrufe.
computernerds
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.06.2017
Beiträge: 165
Beitrag computernerds Mitglied 04:11:04 11.11.2017   Titel:              Zitieren

return false. Das ist doch der Rueckgabewerte. Und in der main Funktion frag ich == false ab.

Klar ich hab nen Denkfehler drin.
Aber wo?? Steh grad am Schlauch..


Zuletzt bearbeitet von computernerds am 04:11:48 11.11.2017, insgesamt 1-mal bearbeitet
SG1
Mitglied

Benutzerprofil
Anmeldungsdatum: 19.03.2001
Beiträge: 3163
Beitrag SG1 Mitglied 08:21:39 11.11.2017   Titel:              Zitieren

Zeile 23/24.
computernerds
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.06.2017
Beiträge: 165
Beitrag computernerds Mitglied 13:16:28 11.11.2017   Titel:              Zitieren

hm aber wenn er doch in Zeile 11 reingeht, dann gibt er doch false zurueck und Zeile 23/24 werden gar nicht ausgefuert ??

ODER werden die Rueckgabewerte alle auf dem Stack gespeichert und es kommt nur ein einziger Rueckgabewert in der main an obwohl vielleicht tausende in der rekursiven Funktion erstellt wurden ??

Erst wenn die Funktion komplett abgearbeitet ist, dann wird etwas an die main Funktion zurueckgegeben. Die return Werte zwischendrin die kommen nie in der main an. Oder?


Zuletzt bearbeitet von computernerds am 14:41:35 11.11.2017, insgesamt 1-mal bearbeitet
Tobiking2
Mitglied

Benutzerprofil
Anmeldungsdatum: 12.04.2009
Beiträge: 1007
Beitrag Tobiking2 Mitglied 15:39:58 11.11.2017   Titel:              Zitieren

computernerds schrieb:
Erst wenn die Funktion komplett abgearbeitet ist, dann wird etwas an die main Funktion zurueckgegeben. Die return Werte zwischendrin die kommen nie in der main an. Oder?

Rückgabewerte kommen immer da an wo die Funktion aufgerufen wird. In main wird deine Funktion nur für den Wurzelknoten aufgerufen. Warum sollten dort die Ergebnisse aller Kinderknoten ankommen? In Zeile 23/24 bekommst du aber die Ergebnisse der Kinderknoten. Die kannst du verwenden, um das Ergebnis des Wurzelknoten abhängig vom Ergebnis der Kinder zu machen. Da sich das weiterführt, sind die Kinder dann auch abhängig von deren Kindeskindern etc. und du deckst den ganzen Baum ab.


Zuletzt bearbeitet von Tobiking2 am 15:40:34 11.11.2017, insgesamt 1-mal bearbeitet
computernerds
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.06.2017
Beiträge: 165
Beitrag computernerds Mitglied 18:03:50 11.11.2017   Titel:              Zitieren

ah ok danke.
Aber wie muesste ich denn mein Programm oben umschreiben,
damit ich auch false zurueckgeliefert bekomme und mich nicht auf die print Ausgabe "Fehler" in Zeile 10 verlassen muss ?

Das hab ich gerade bei stackoverflow gefunden.
Kommt hier 0 oder 10 raus ?

Java:
        int count = 0;
        for(int i=0; i < 10; ++i)
            count = count++;
 
        System.out.println(count);


Zuletzt bearbeitet von computernerds am 18:18:27 11.11.2017, insgesamt 6-mal bearbeitet
C++ Forum :: Java ::  Binary Search tree   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.