Eine Suche im BinaerBaum
-
ein frohes neues an alle

kaum hat das jahr begonnen sitz ich wieder über einem problem

mein ziel: (wenn es der titel noch nicht verraten hat
)
ich möchte einen wert in einem binärbaum suchen..
mein problem: er gibt mir komische werte wieder zurück, die ich nicht nachvollziehen kannDie MAIN
#include "bintree.h" #include "bintree.cpp" #include <iostream> int main() { Baum<int> binaryTree; binaryTree.einfuegen(5); binaryTree.einfuegen(3); binaryTree.einfuegen(2); binaryTree.einfuegen(6); binaryTree.einfuegen(12); binaryTree.einfuegen(9); binaryTree.einfuegen(10); binaryTree.einfuegen(1); std::cout << binaryTree.pruefen(4) << "\n"; std::cout << binaryTree.pruefen(6) << "\n"; return 0; }der QUELLTEXT
/**Suche im Binaerbaum*/ template<class T> int Baum<T>::SuchenImBinaerbaum(knoten<T>* &p, T t) { if(p!=NULL) { if(p->inhalt == t) return p->inhalt; if(t > p->inhalt) SuchenImBinaerbaum(p->rechts, t); if(t < p->inhalt) SuchenImBinaerbaum(p->links, t); } else return 0; } /**Baum Methode pruefen*/ template<class T> int Baum<T>::pruefen(T t) { return SuchenImBinaerbaum(root, t); }DIE AUSGABE
g++ -c -o bintree.o bintree.cpp c++ -c bintree_main.cpp -I./UnitTest++/src -I. c++ bintree.o bintree_main.o -L./UnitTest++ -lUnitTest++ -o bintree_main -4 134516320ich hoffe es kann mir einer erklären, wieso die ausgabe so eigenartig ist
vielen dank schon einmal
grüße kylanysik
-
Geh da am besten mit dem Debugger durch. Dann siehst du, wo die Werte zurückgegeben werden und schon hast du den (Denk)fehler.
-
[cpp]
/**Suche im Binaerbaum*/
template<class T>
int Baum<T>::SuchenImBinaerbaum(knoten<T>* &p, T t)
{
if(p!=NULL) {
if(p->inhalt == t) return p->inhalt;
if(t > p->inhalt) return SuchenImBinaerbaum(p->rechts, t);
if(t < p->inhalt) return SuchenImBinaerbaum(p->links, t);
}
else return 0;
}
[/cpp]
-
Eine saubere Einrückung wäre wahrscheinlich auch nicht das Schlechteste...

-
vielen vielen dank für die antworten
@ volkard
ich danke dir. jetzt funzt alles
@ nexus
ich werds versuchen leserlicher zu gestalten
grüße kylanysik
-
und sehr gut ist es, immer den fall, den man festgestellt hat, sofort abzuhandeln.
damit meine ich, das fürchterlich lange verschieben des return 0./**Suche im Binaerbaum*/ template<class T> int Baum<T>::SuchenImBinaerbaum(knoten<T>* &p, T t) { if(p==NULL) return 0; if(p->inhalt == t) return p->inhalt; if(t > p->inhalt) return SuchenImBinaerbaum(p->rechts, t); if(t < p->inhalt) return SuchenImBinaerbaum(p->links, t); }
-
Üblicherweise arbeitet man bei so etwas mit Referenzen (auch, wenn das bei PODs meist langsamer ist ->
const T &t) - und der Rückgabewert erscheint mir auch zumindest fragwürdig ^^ (sollte wahrscheinlich eherconst &Toder&ToderTsein). Da man aber den Knoten eh schon durch die Referenz auf den Pointer bekommst, könntest du auch nur nenboolnehmen (gefunden/nicht gefunden - oder ihn ganz weglassen und Notfalls ne Exception werfen - gibt genug Möglichkeiten - aber die ist sicherlich nicht (vollkommen) richtig)bb