# Bintree größten Wert



## emceegenty1 (15. Jan 2012)

Die Methode soll den größten Wert in einem Baum ausgeben aber wohlmöglich ist da ein Fehler in der rekursiven Methode. Kann mir jemand helfen?  

```
int maximum(){
	
	   if (value > max);
	   		max = value;
	   
	   if(links != null)
		   return links.maximum();
	   
	   if(rechts != null)
		   return rechts.maximum();

	   return max;
}
```


----------



## Gast2 (15. Jan 2012)

Der größte Wert in einem binären Baum ist doch immer das Blatt ganz rechts.
Du musst also einfach nur den Pfad ganz rechts bis zum Blatt durchlaufen.


----------



## Dekker (15. Jan 2012)

Ja, was ist max. Das weiß deine Methode nicht. Oder das ding is global...

Außerdem gilt das was EikeB gesagt hat


----------



## emceegenty1 (15. Jan 2012)

max wurde als Klassenvariable vorher deklariert.


```
int max = 0;
```


Ich habe mich falsch ausgedrückt, das ist kein Binärbaum sonder einfach nur ein unsortierer Baum.

Das Programm gibt mir bei folgendem Baum in Infix Notation 111 aus.

(((111)7((999)2(42)))1((23)17(42(8))))


----------



## Final_Striker (15. Jan 2012)

Du gibts ja auch zurück, dass der linke Knoten das Maximum enthält ohne den rechten überhaupt betrachtet zu haben.


----------



## emceegenty1 (15. Jan 2012)

Ja das weiß ich ja auch aber warum :lol:


----------



## Gast2 (15. Jan 2012)

Wenn der Baum unsortiert ist, dann musst du den kompletten Baum durchlaufen.
Du schaust dir also beim Knoten X, den Wert des Knoten X an sowie das Maximum des linken UND rechten Teilbaums. Das Maximum von den drei Werten gibst du zurück.


----------



## Final_Striker (15. Jan 2012)

emceegenty1 hat gesagt.:


> Ja das weiß ich ja auch aber warum :lol:




```
if(links != null)
           return links.maximum(); //<-- weil du hier wieder rausspringst
       
       if(rechts != null)
           return rechts.maximum(); // ohne dir das hier angeguckt zu haben
```


----------



## emceegenty1 (15. Jan 2012)

Hab ich mittlerweile so gelöst 


```
int maximum(){
	
	   int linkesMax	= links  == null ? 0 : links.maximum();
	   int rechtesMax	= rechts == null ? 0 : rechts.maximum();
	   
	   return Math.max(value, Math.max(linkesMax, rechtesMax));
	   
}
```


Danke für eure Tipps und Zeit


----------

