2016-04-21 8 views

Antwort

-1

In Ihrem Code, wenn der rechte Knoten leer ist, löschen Sie ihn immer noch. Anstatt den Strom zu löschen, wenn es der max. Probieren Sie etwas wie folgt aus:

removeLargest() { 
      current = getRoot(); 
      rightNode == null; 

      while (root.Right){ 
        current == root.Right 
      } 
      if (current.left()){ 
       rotate() 
      } 
      current.delete() 
     } 
+1

Wenn die rechte Nicht-Blattknoten ein linkes Kind hat Sie müssen sich drehen. – EJP

+0

@EJP Danke, du hast Recht –

+0

Ich habe es gerade rekursiv funktioniert. Vielleicht können Sie einen Blick darauf werfen, um zu sehen, ob es einen Fehler gibt. – Ali

0
public void remove() 

     { 
     root = deleteMax(root); 
     }  

    private Node deleteMax(Node x) { 
    if (x.getRighChild() == null) 
     { 
     return x.getLeftChild(); 

     } 
    x.setRighChild(deleteMax(x.getRighChild())); 
    return x; 

}

Verwandte Themen