Results 1 to 4 of 4

Thread: Programmieraufgabe: Root setzen

  1. #1
    Master
    Join Date
    Dec 2007
    Posts
    126
    Thanks
    34
    Thanked 30 Times in 9 Posts

    Programmieraufgabe: Root setzen

    hi,

    hab ein problem mit der rotate methode. Hänge schon seit Stunden bei der fehlersuche, komme aber einfach nicht dahinter ... -_-

    PHP Code:
    public AvlNode rotateRight(AvlNode n) {

            
    //Aktuellen Root ausgeben
            
    System.out.println("Aktueller Root:            " root);
            
    System.out.println("Aktueller root.parent:        " root.parent);
            
            
            
    AvlNode v n.left;
            
    n.left v.right;
            
    v.right n;

            
            if (
    root.key == n.key) {
                
    //Neue Wurzel setzen
                
    root v;
                
    //Wurzel Parent auf null setzen
                
    root.parent null;
            }
            
            
    //Neue Wurzel
            
    System.out.println("Neuer Root:             " root);
            
    System.out.println("Neuer root.parent:        " root.parent);
            
            

            
    //TODO: Höhen neu berechnen
            
    return v;

        } 
    Ausgabe:
    in0001: DBG Insert: 9
    in0001: DBG Insert: 8
    in0001: DBG Insert: 7
    try rotating ...
    Aktueller Root: 9
    Aktueller root.parent: null
    Neuer Root: 8
    Neuer root.parent: null

    in0001: ERR Elternknoten der Wurzel ist nicht richtig gesetzt: 8
    ------------------
    Setze ich den root.parent nicht auf null, gibt er als root.parent '9' aus, was ja auch nicht erlaubt (und falsch) ist. Vorschläge für die Sackgasse ?

    lg

  2. #2
    Principal
    Join Date
    Mar 2010
    Posts
    42
    Thanks
    1
    Thanked 6 Times in 6 Posts
    hmn den code mit root kann ich nicht ganz nachvollziehen.. die methode sollte ja unabhängig vom root knoten funktionieren.. damit du auch eine drehung in einem teilbaum machen kannst (gut du machst eine abfrage, was aber im endeffekt unnützer code ist)
    was mich auch zur lösung bringt:
    hol dir doch den parent verweis von n, und den übernimmst dann für v
    genauso musst den parentverweis für n.left updaten (falls es einen gibt)
    Last edited by rooti; 06-04-2012 at 21:46.

  3. #3
    Master
    Join Date
    Dec 2007
    Posts
    126
    Thanks
    34
    Thanked 30 Times in 9 Posts
    danke schon mal fürs antworten ...

    ja ich hab die erste Node im insert gleich als root gesetzt, da aber nichts final ist, ist das doch egal oder ? (eben wegen den drehungen)

    meinst du statt
    root.parent = null
    -> v.parent = n.parent und root = v in der abfrage... ? Der Verweis funktioniert (v.parent ist jetzt null), n.left und n.right verweisen auch auf null (so wie es sein soll), aber Fehlermeldung bleibt gleich...
    Last edited by hijack; 06-04-2012 at 22:35.

  4. #4
    Principal
    Join Date
    Mar 2010
    Posts
    42
    Thanks
    1
    Thanked 6 Times in 6 Posts
    das problem an dem code ist dass die kinder nicht auf die parent knoten verweisen.. in jedem knoten muss ein verweis auf den parent knoten sein und im root knoten ist der verweis auf null
    setz dir vielleicht mal einen breakpoint in eclipse am schluss der rotation und schau dir alle knoten an, ob sie einen gültigen verweis haben.. so bin ich vorgegangen

    und versuch den code vielleicht gleich so zu schreiben, dass du nicht direkt den root knoten verwendest
    Last edited by rooti; 06-04-2012 at 23:47.

  5. The Following User Says Thank You to rooti For This Useful Post:


Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •