# Binärbaum zahlen addieren



## Wuella (17. Dez 2009)

Hallo,

ich möchte die Zahlen eines Binärbaums addieren.

Ich kriege es aber nicht hin, die Summe der Zahlen des rechten Teilbaums mit der Summe der Zahlen des linken Teilbaums zu addieren und geschlossen auszugeben.

Vielmehr gebe ich beide Summen getrennt aus, was ich aber nicht will.

Rekursion habe ich wohl noch nicht ganz verstanden 

Bitte schaut mal drüber...


```
void summeElemente() {
		int summe = 0;
		summeElemente(wurzel, summe);	
	}
	
	 void summeElemente(Knoten k, int summe) {
		 if (k != null) {
			 summeElemente(k.links, summe);
			summe += k.getZahl();
			summeElemente(k.rechts, summe);
			
			if (k.links == null && k.rechts == null)
				System.out.println("Summe: " + summe);
				
	    }
		
	}
```


----------



## Michael... (17. Dez 2009)

Ich würde die Ausgabe nicht in der Methode machen, sondern ihr stattdessen einen return Wert spendieren. Da kannst Du Dir rekursiv die Teilsummen zurückgeben lassen und zu dem Wert des Knoten addieren usw.


----------



## Wuella (17. Dez 2009)

Hi Michael,

ich habe mal versucht, deinen Vorschlag umzusetzen, abes es hapert wohl noch.
Er gibt mir jetzt nur den Wert der Wurzel zurück.

Könntest du mir vllt. einen Tipp zur Verbesserung geben? Vielleicht verstehe ich damit dann auch die Rekursion etwas besser 


```
void summeElemente() {
		int summe = 0;
		int check = 0;
		check = summeElemente(wurzel, summe);	
		System.out.println("Summe: " + check);
	}
	
	 int summeElemente(Knoten k, int summe) {
		 if (k != null) {
			summeElemente(k.links, summe);
			summe += k.getZahl();
			summeElemente(k.rechts, summe);		
	    }
		 return summe;
	}
```


----------



## Michael... (17. Dez 2009)

Ich wurde es mal wie folgt in der Richtung probieren. Ist allerdings ungetestet.

```
public int summeElemente(Knoten k) {
	if (k==null)
		return 0;
	else
		return k.getZahl() + summeElemente(k.links) + summeElemente(k.rechts);
}
```


----------



## Wuella (17. Dez 2009)

Klappt!
Danke!

Mit Rekursion muss ich mich noch anfreunden


----------



## Cassy3 (17. Jan 2022)

Ist jetzt 13 Jahre her, aber wie kommt man bitte auf so eine Geniale Lösung? Ich hänge hier bestimmt schon seit 3 Stunden dran, hab mehr als 100 Zeile Code geschrieben und wieder gelöscht und dann ist die Lösung 5 Zeilen lang ;D


----------



## Cassy3 (17. Jan 2022)

Ist jetzt 13 Jahre her, aber wie kommt man bitte auf so eine Geniale Lösung? Ich hänge hier bestimmt schon seit 3 Stunden dran, hab mehr als 100 Zeile Code geschrieben und wieder gelöscht und dann ist die Lösung 5 Zeilen lang ;D


----------



## mihe7 (17. Jan 2022)

Cassy3 hat gesagt.:


> Ist jetzt 13 Jahre her, aber wie kommt man bitte auf so eine Geniale Lösung?


Mal abgesehen davon, dass das ein Standardproblem ist: so funktioniert Rekursion nun einmal - sofern das Problem dazupasst, was in einem Baum (= Struktur mit rekursiver Eigenschaft) definitiv der Fall ist.


----------

