Bäume

PaulDo

Aktives Mitglied
Folgende Aufgabe liegt mir vor: 9+(3 x 5 - 4) + (7 x 2 / (8 x 4-2)+4 )x 5. Wie packe ich diesen Ausdruck in einen Baum? Also Roof ist +. Links kommt die 9. Links + dann x dann 5. Aber danach habe keine Idee mehr?
 

httpdigest

Top Contributor
Könntest Du mal versuchen, mir diesen Weg zu beschreiben? Danke im Voraus.
Naja:
1. du schaust dir den Ausdruck an und identifizierst erstmal den Operator mit der geringsten Priorität/Bindung auf oberster Ebene
2. du entscheidest dich bei mehreren solcher Operatoren auf derselben Ebene für eine "Klammerung" (also ob der Baum "links-lastig" oder "rechts-lastig" wird), also ob du 1 + 2 + 3 als (1 + 2) + 3 oder als 1 + (2 + 3) im Baum repräsentieren willst
3. du teilst den Ausdruck an dem gewünschten Operator, den du unter 2. identifiziert hast, in zwei Teilausdrücke A und B auf, wobei A der Teil links vom Operator aus 2. ist, und B der Teil rechts vom Operator aus 2.
4. du erzeugst einen Knoten mit dem Namen des Operators aus 2.
5. du wendest diese Teilschritte 1. bis 5. auf die in 3. aufgeteilten Teilausdrücke A und B an, wobei der für A entstandene Teilbaum dann das linke Kind des Knotens aus 4. wird und der für B entstandene Teilbaum das rechte Kind des Knotens aus 4.

Fertig. Und dann muss man noch etwas mit dem Layouting rumspielen, wenn man das ganze in Form eines solchen "ASCII-Art" Diagramms schreiben will.
 

KonradN

Super-Moderator
Mitarbeiter
Alternativ kann man auch den umgekehrten Weg gehen und den Baum sozusagen von unten nach oben statt von oben nach unten aufzubauen.

Das hat den Vorteil, dass Du genau so vorgehen kannst wie bei dem Ausrechnen.

Du hast also z.B. eine Aufgabe wie (2 + 4) * 7 + 3 * (2 + 3)

Wie rechnest Du das aus? Was musst Du zuerst ausrechnen, um zum richtigen Ergebnis zu kommen?

Klammern kommen zuerst, also als erstes musst Du 2+4 und 2+3 Rechnen. Damit hast Du die ersten Zwei Teilbäume - jeweils ein Knoten mit + und die Blätter sind einmal 2 und 4 und einmal 2 und 3.

Was kommt dann? Beim ersten Teilbaum kommt das * 7 und beim zweiten Teilbaum das 3 *

Also hast Du jeweils den Operator als Knoten und rechts und links kommen die Operanden dran. Diesmal ist halt der erste Teilbaum und die 7 und beim zweiten dann die 3 und der zweite Teilbaum.

Dann kommt am Ende noch die Addition.

Das ist von der Logik her evtl. leichter zu verstehen. Und damit wird auch die Umsetzung relativ einfach, wenn man es implementieren müsste.

Aber das ist jetzt eine sehr subjektive Sichtweise, da dies halt genau meiner Herangehensweise entsprechen würde, wenn ich sowas rechnen müsste.

Da ist halt nur wichtig, dass man die fachliche Seite beherrscht ... Und da fällt mir nur ein: 25 - 5/5 = 4! Sowas muss man halt können und verstehen!
 

mihe7

Top Contributor
Da werfe ich mal eine weitere Methode in den Raum, die eigentlich nichts anderes ist als die beiden anderen (die mathematischen Gesetze gelten): schreibe die Rechnung mit Funktionen statt Operatoren.

Aus a+b+c*d wird dann z. B. add(a, add(b, mult(c,d))) und schon hast Du den Baum dastehen.

Code:
  +
 / \
a   +
   / \
  b   *
     / \
    c   d
 

MarvinsDepression

Bekanntes Mitglied
Der Vorschlag gefällt mir. Da sind wir doch gleich bei der Polnischen Notation, glaube ich. Am Taschenrechner nutze ich auch immer UPN, wo's geht (geht eigentlich immer).
Man kann sich auch einen Spaß machen und ...
Aus a+b+c*d wird dann z. B. add(a, add(b, mult(c,d))) und schon hast Du den Baum dastehen.
... nennen die Methoden dann noch getSummOfTwoValues(...) oder getFirstValueDivideBy2ndValue(...) und nennen die Variablen beim Wert, also valueOfNine und valueOfSeven ...
Das wird kein Baum, das wird ein Fest 😆
 

PaulDo

Aktives Mitglied
Alternativ kann man auch den umgekehrten Weg gehen und den Baum sozusagen von unten nach oben statt von oben nach unten aufzubauen.

Das hat den Vorteil, dass Du genau so vorgehen kannst wie bei dem Ausrechnen.

Du hast also z.B. eine Aufgabe wie (2 + 4) * 7 + 3 * (2 + 3)

Wie rechnest Du das aus? Was musst Du zuerst ausrechnen, um zum richtigen Ergebnis zu kommen?

Klammern kommen zuerst, also als erstes musst Du 2+4 und 2+3 Rechnen. Damit hast Du die ersten Zwei Teilbäume - jeweils ein Knoten mit + und die Blätter sind einmal 2 und 4 und einmal 2 und 3.

Was kommt dann? Beim ersten Teilbaum kommt das * 7 und beim zweiten Teilbaum das 3 *

Also hast Du jeweils den Operator als Knoten und rechts und links kommen die Operanden dran. Diesmal ist halt der erste Teilbaum und die 7 und beim zweiten dann die 3 und der zweite Teilbaum.

Dann kommt am Ende noch die Addition.

Das ist von der Logik her evtl. leichter zu verstehen. Und damit wird auch die Umsetzung relativ einfach, wenn man es implementieren müsste.

Aber das ist jetzt eine sehr subjektive Sichtweise, da dies halt genau meiner Herangehensweise entsprechen würde, wenn ich sowas rechnen müsste.

Da ist halt nur wichtig, dass man die fachliche Seite beherrscht ... Und da fällt mir nur ein: 25 - 5/5 = 4! Sowas muss man halt können und verstehen!
Danke, so kann ich es nachvollziehen. Aber die Aufgabe 25-5/5 = 4 verstehe ich nicht. Ich würde erst 5/5 rechnen = 1 und 25-1 = 24. Warum wäre das falsch?
 
Y

yfons123

Gast
Java:
public class Main {
    public static void main(String[] args) {
        System.out.println(25-5/5);
    }
}
Danke, so kann ich es nachvollziehen. Aber die Aufgabe 25-5/5 = 4 verstehe ich nicht. Ich würde erst 5/5 rechnen = 1 und 25-1 = 24. Warum wäre das falsch?
eclipse mit java 17 würde es auch so rechnen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Cassy3 Binäre Bäume Rekursiv durchlaufen und bestimmte Elemente Zählen Java Basics - Anfänger-Themen 6
E Bäume/ allgemeine Fragen Java Basics - Anfänger-Themen 21
G Rot-Schwarz-Bäume Java Java Basics - Anfänger-Themen 10
M Rot Schwarz Bäume, ausführen? Java Basics - Anfänger-Themen 6
L Binären Bäume für beliebige Datentypen Java Basics - Anfänger-Themen 15
B Theorie Rot-Schwarz-Bäume Java Basics - Anfänger-Themen 2
D Klausur Vorbereitung: Listen, Rekursion, Bäume & Vererbung Java Basics - Anfänger-Themen 3
M Bäume und Listener Java Basics - Anfänger-Themen 2
L 2-3-4 Bäume Konstruktor Java Basics - Anfänger-Themen 2
E Binäre Bäume Java Basics - Anfänger-Themen 7
W Bäume - containsValueRec Java Basics - Anfänger-Themen 2
R Crashkurs Listen / Bäume Java Basics - Anfänger-Themen 10
J bäume Java Basics - Anfänger-Themen 5
C Bäume in Java. Knoten in Array speichern Java Basics - Anfänger-Themen 3
C Bäume in Java. Code funktioniert nicht Java Basics - Anfänger-Themen 12
G Tertiäre Bäume Java Basics - Anfänger-Themen 2
G Bäume implementieren Java Basics - Anfänger-Themen 7
F Bäume in Java Java Basics - Anfänger-Themen 4
F Bäume zeichnen Java Basics - Anfänger-Themen 5
D n-näre Bäume (DOM) durchsuchen Java Basics - Anfänger-Themen 4
G Frage zur Bäume ? Java Basics - Anfänger-Themen 3
L [Aufgabe] Huffman Bäume Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben