Baum aus Integer Liste erstellen

lennero

Bekanntes Mitglied
Hallo.
Die Liste ist folgendermaßen aufgebaut:

Beispiel für die Folge:
2 3 0 3 10 11 12 1 1 0 1 99 2 1 1 2

Der Wurzelknoten ist die gesamte äußere Liste, das heißt alle Zahlen oben.

Die erste Zahl in einem Knoten gibt die Anzahl der Kindsknoten an. Im oberen Beispiel hat der Wurzelknoten also zwei Kinder. Die zweite Zahl gibt an wieviele Zahlen am Ende des Knotens stehen. Im oberen Beispiel beginnt der Wurzelknoten mit 2 und 3. Das heißt der Wurzelknoten hat 2 Kinder und die letzten drei Zahlen sind 1 1 2.

Das erste Kind vom Wurzelknoten ist 0 3 10 11 12. Dieser Knoten hat 0 Kinder und 3 Zahlen am Ende, die 10 11 und 12.
Das zweite Kind vom Wurzelknoten ist 1 1 0 1 99 2. Dieser Knoten hat 1 Kind und 1 Zahl am Ende.
Das Kind vom zweiten Kind ist 0 1 99. Dieser Knoten hat 0 Kinder und 1 Zahl am Ende (99)

Das ganze möchte ich dann am Ende als Map darstellen. Wobei eine Subliste (ein Knoten) als Schlüssel und alle Kinder dieses Knotens als List<List<Integer>> dargestellt werden sollen.

Folgende Methode funktioniert zwar, aber ich habe einen off-by-one error und keine Ahnung wie ich diesen beheben kann.
Die Methode gibt immer den Index des nächsten Knotens zurück, welcher dann genutzt wird um die Sublisten zu bilden.

Java:
    private static int formTree(List<Integer> nums, Map<List<Integer>, List<List<Integer>>> tree, int current)
    {
        int childCount = nums.get(current);
        int metaDataAmount = nums.get(current + 1);
        
        if(childCount == 0)
        {
            int p = current + 2;
            for(int i = 0; i < metaDataAmount; i++)
            {
                p++;
            }
            return p;
        }
        else
        {
            //create parent
            List<Integer> parent = new ArrayList<Integer>();
            int p = current + 2;
            for(int i = 0; i < childCount; i++)
            {
                p = formTree(nums, tree, p);
            }
            for(int i = current; i < p + metaDataAmount + 1; i++)
            {
                parent.add(nums.get(i));
            }
            
            if(!tree.containsKey(parent))
            {
                tree.put(parent, new ArrayList<List<Integer>>());
            }
            
            //create all children
            p = current + 2;
            for(int i = 0; i < childCount; i++)
            {
                int firstIndexChild = p;
                p = formTree(nums, tree, p);
                
                List<Integer> child = new ArrayList<>();
                for(int j = firstIndexChild; j < p; j++)
                {
                    child.add(nums.get(j));
                }
                if(!tree.get(parent).contains(child))
                {
                    tree.get(parent).add(child);
                }
            }
            return p;
        }
    }

Die Ausgabe die ich am Ende erhalte wenn ich die Map durchgehe ist folgende:
Java:
Parent: [2, 3, 0, 3, 10, 11, 12, 1, 1, 0, 1, 99, 2, 1, 1, 2] //richtig
Children:
[0, 3, 10, 11, 12] //richtig
[1, 1, 0, 1, 99] //sollte 1 1 0 1 99 2 sein

Parent: [1, 1, 0, 1, 99, 2, 1] //sollte 1 1 0 1 99 2 sein
Children:
[0, 1, 99] //richtig

Das Problem an der Sache ist, dass ich nicht vorher weiß, wo ein Knoten endet. Deshalb muss ich rekursiv runter bis ich einen Knoten ohne Kinder erwische.
Was ich am Ende haben möchte, sind alle Knoten und Kindsknoten (als adjacency List). Gibt es hier einen einfacheren Ansatz den ich übersehen habe?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D spezifische Knoten in einem Baum zählen Java Basics - Anfänger-Themen 9
HelpInneed Baum ausgeben (aber mal anders) Java Basics - Anfänger-Themen 3
G AVL-Baum Java Basics - Anfänger-Themen 1
G Rot-Schwarz-Baum Java Basics - Anfänger-Themen 8
CptK Interface Baum visualisieren Java Basics - Anfänger-Themen 37
CptK Best Practice Merge-Sort als Baum darstellen Java Basics - Anfänger-Themen 3
E Baum pfadweise durchlaufen Java Basics - Anfänger-Themen 11
O Naives links rechts einfügen in ADT Baum Java Basics - Anfänger-Themen 8
L Traversierungsverfahren Baum: LevelOrder Java Basics - Anfänger-Themen 17
L Rekursion im Baum Java Basics - Anfänger-Themen 9
L Baum Knoten zählen Java Basics - Anfänger-Themen 6
L B+Baum innere Knoten erstellen Java Basics - Anfänger-Themen 3
D B-Baum einfügen und löschen Java Basics - Anfänger-Themen 2
F Aufgabe Rekursion Binärer Baum Java Basics - Anfänger-Themen 15
D Werte AVL-Baum löschen Java Basics - Anfänger-Themen 2
M Binären Baum Kinder setzen Java Basics - Anfänger-Themen 12
U 2-3-4 Baum Top-Down Java Basics - Anfänger-Themen 4
U 2-3-4 Baum Top-Down Java Basics - Anfänger-Themen 0
J Überprüfen, ob eine 2D Matrix ein Baum ist Java Basics - Anfänger-Themen 5
R Baum erzeugen Java Basics - Anfänger-Themen 61
B Baum Traversierung Postorder Java Basics - Anfänger-Themen 6
B OOP Über einen AVL-Baum iterieren (NullPointer) Java Basics - Anfänger-Themen 5
A Voller Baum Java Basics - Anfänger-Themen 7
S n-ärer Baum Java Basics - Anfänger-Themen 6
O Unterschied Baum <-> Automat Java Basics - Anfänger-Themen 2
K Tiefen- und Breitensuche beim Baum durch Stack und Warteschlange Java Basics - Anfänger-Themen 1
C kompletter baum Java Basics - Anfänger-Themen 2
M Collections Iterator und generischer Baum Java Basics - Anfänger-Themen 0
M Baum Code kurze frage ... Java Basics - Anfänger-Themen 6
D Ein Objekt in einem Baum finden und ausgeben. Java Basics - Anfänger-Themen 4
K Rot-Schwarz-Baum min und max-Tiefe Java Basics - Anfänger-Themen 1
A min() Methode Baum Java Basics - Anfänger-Themen 1
J Baum rekursiv durchlaufen Java Basics - Anfänger-Themen 2
J Baum Knoten löschen Java Basics - Anfänger-Themen 10
T Baum mit Turtle zeichnen Java Basics - Anfänger-Themen 2
Screen 2,4 Baum Frage Java Basics - Anfänger-Themen 6
T Rot-schwarz Baum Problem Java Basics - Anfänger-Themen 3
A Rekursion in Baum und ArrayList als Rückgabe Java Basics - Anfänger-Themen 2
P Pythagoras Baum - Berechnung der Punkte Java Basics - Anfänger-Themen 9
C 2-3 Baum Java Basics - Anfänger-Themen 6
H Baum Java Basics - Anfänger-Themen 4
L Rot Scharz Baum von Binärbaum erben Java Basics - Anfänger-Themen 9
B Baum > Baum-Swing Java Basics - Anfänger-Themen 4
L eigenen Baum schreiben Java Basics - Anfänger-Themen 5
Luk10 Anzahl der Knoten in einem Baum ausgeben! Java Basics - Anfänger-Themen 6
T Array in einen Baum zu überführen Java Basics - Anfänger-Themen 3
S Das reinschreiben einer Klasse in den Baum Java Basics - Anfänger-Themen 6
H B-Baum: Knoten Position als Parameter oder als Variable im Objekt? Java Basics - Anfänger-Themen 4
A Baum mit geometricfigur Werte Java Basics - Anfänger-Themen 6
D Datentypen Einfügen im RotSchwarz Baum Java Basics - Anfänger-Themen 2
F FileSystem in Baum darstellen/wurzel festlegen Java Basics - Anfänger-Themen 3
G List als Rückgabewert einer rekursiven Methode (Baum) Java Basics - Anfänger-Themen 3
I Baum graphisch darstellen Java Basics - Anfänger-Themen 2
P Binärer Baum mit Composite-Entwurfsmuster Java Basics - Anfänger-Themen 2
L Baum Swing AVL Java Basics - Anfänger-Themen 4
Binary.Coder 2-3-4 Baum vs. (2,4) Baum Java Basics - Anfänger-Themen 2
ModellbahnerTT Ab-Baum Applet Java Basics - Anfänger-Themen 3
P Baum-Menü in Java Java Basics - Anfänger-Themen 5
H Baum Java Basics - Anfänger-Themen 11
G AVL Baum Java Basics - Anfänger-Themen 20
J Baum spiegeln Java Basics - Anfänger-Themen 7
N 2-3 Baum, Einfügen Java Basics - Anfänger-Themen 5
G Rekursion mit Return - Baum durchlaufen Java Basics - Anfänger-Themen 4
G Baum Datenstruktur Java Basics - Anfänger-Themen 2
V Baum mit log n Aufwand für Einfügen und Löschen und. Java Basics - Anfänger-Themen 5
H Tiefensuche im binären Baum Java Basics - Anfänger-Themen 2
P Problem mit Darstellung im Baum Java Basics - Anfänger-Themen 4
G Binärer Baum Java Basics - Anfänger-Themen 3
M Binärer Baum Tiefe Java Basics - Anfänger-Themen 14
G universeller baum Java Basics - Anfänger-Themen 13
G Baum testen Java Basics - Anfänger-Themen 20
B Array To Baum Java Basics - Anfänger-Themen 2
B Baum to Array Java Basics - Anfänger-Themen 17
H Löschen in einem binären Baum führt zu einem StackOverflow Java Basics - Anfänger-Themen 2
L Binären Baum speichern Java Basics - Anfänger-Themen 6
R Pythagoras-Baum Java Basics - Anfänger-Themen 5
W Baum durchlaufen Java Basics - Anfänger-Themen 3
T binärer Baum Java Basics - Anfänger-Themen 3
G eine Knoten aus einem Baum löschen. [SOLVED] Java Basics - Anfänger-Themen 7
P allg. Baum aus Liste Java Basics - Anfänger-Themen 2
J String in binären Baum umwandeln Java Basics - Anfänger-Themen 7
R binärer Baum Java Basics - Anfänger-Themen 2
F Abstrakte Klasse Baum Java Basics - Anfänger-Themen 6
D Map<String, Integer> sortieren und der reinfolge nach die Glieder abfragen Java Basics - Anfänger-Themen 3
MoxMorris Integer.MAX_VALUE und Double.MAX_VALUE Unterschied Java Basics - Anfänger-Themen 3
Jul1n4tor Scanner error bei Eingabe die kein Integer ist Java Basics - Anfänger-Themen 4
belana wie am besten 2D Array von String to Integer Java Basics - Anfänger-Themen 18
volcanos Addition -> List<Integer> mit Arrays.asList() versus List<Integer>ArrayList<>() Java Basics - Anfänger-Themen 14
JavaBeginner22 Integer in String umwandeln Java Basics - Anfänger-Themen 7
sserio printf integer formatting Java Basics - Anfänger-Themen 17
M Unterschied Integer.toString(x) und x.toString() Java Basics - Anfänger-Themen 22
H Uhrzeitespanne in Integer Wert umrechnen Java Basics - Anfänger-Themen 1
T Java Integer multiplizieren Java Basics - Anfänger-Themen 6
H Fehler bei integer Division Java Basics - Anfänger-Themen 28
D Methoden Plathhalter für Integer in einer Methode Java Basics - Anfänger-Themen 19
StevenGG Java swing "New Integer" Java Basics - Anfänger-Themen 5
C Integer in Vierer-Zahlblöcke aufteilen Java Basics - Anfänger-Themen 11
L integer Java Basics - Anfänger-Themen 6
Zeppi Integer umschreiben Java Basics - Anfänger-Themen 5
rafi072001 Integer Anomalie Java Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben