Remove-Methode in Java BST

stimmen
1

Ich habe eine hw Frage ... Ich habe eine Methode remove für einen binären Suchbaum zu schreiben, so weit, was ich habe unten ist, aber ich immer ein paar Fehler im Zusammenhang mit meiner Methode remove bekommen und ich bin mir nicht sicher, warum. ..would bitte jemand der Lage, meinen Code zu überprüfen. Danke. Ich habe auch versucht, eine Suchmethode zu schaffen, aber ich bin mit, dass auch einige Probleme, ... dass die ganze Art und Weise an der Unterseite meines entfernen Code ist.

import java.util.*;

class TreeNode383<E extends Comparable> {

  private E data;

  private TreeNode383<E> left;

  private TreeNode383<E> right;

  private TreeNode383<E> parent;

  public TreeNode383( ) { left = right = parent = null; }

  public TreeNode383( E d, TreeNode383 <E> l, TreeNode383 <E> r,
                     TreeNode383 <E> p) {

    data = d;

    left = l;

    right = r;

    parent = p;

  }

  public  E getData( ) { return data; }

  public void setData(E d) { data = d; }

  public TreeNode383<E> getLeft( ) { return left; }

  public void setLeft(TreeNode383<E> l) { left = l; }

  public TreeNode383<E> getRight( ) { return right; }

  public void setRight(TreeNode383<E> r) { right = r; }

  public TreeNode383<E> getParent( ) { return parent; }

  public void setParent(TreeNode383<E> p) { parent = p; }


  public String toString( ) {

    String answer = ;

    if (left != null) answer += left.toString( );

    answer += data +  ;

    if (right != null) answer += right.toString( );

    return answer;
  }
}

**The start of my remove method**


  boolean remove (E obj)
  {

 if(root == obj)

 return false;


 //when deleting a leaf just delete it

 else if(obj.getleft == NULL && obj.getright == NULL)
  parent = obj = NULL;


 //when deleting an interior node with 1 child
 //replace that node with the child

 else if(obj.getleft == NULL && obj.getright != NULL)
 obj.setright = new TreeNode383<E>(newData, null, null, null);

 else if(obj.getleft != NULL && obj.getright == NULL
 obj.setleft = new TreeNode383<E>(newData, null, null, null);


 //when deleting an interior node with 2 children
 //find left most node in right subtree,
 //promote it to replace the deleted node
 //promote its child to replace where it was



  /*
  private BinaryNode findMin( BinaryNode t )
  {
      if( t == null )
            return null;
      else if( t.left == null )
           return t;
      return findMin( t.left );
   }
 */
Veröffentlicht am 10/11/2009 um 00:16
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
1

objist eine Instanz Enicht TreeNode383<E>so ist es nicht hat getLeft()oder getRight()Verfahren. Und selbst wenn es so wäre, Dinkel Sie es falsch.

Und was ist root? Ich kann keine Erklärung für diese überall sehen.

Diese Syntax macht keinen Sinn, entweder:

obj.setright = new TreeNode383<E>(newData, null, null, null);

setRight() ist eine Methode, kein Feld (Java wie C # nicht über Eigenschaften) Zuzüglich Sie im Namen einer Hauptstadt ‚R‘ müssen.

Vielleicht sollte das sein

obj.setRight(new TreeNode383<E>(newData, null, null, null));

wenn das heißt, newDatawurde erklärt, was es nicht ist.

Es gibt zu viele Fehler hier zu Sinne des Codes zu machen. Versuchen Sie, eine Funktion zu einem Zeitpunkt, zu implementieren.

Beantwortet am 10/11/2009 um 00:26
quelle vom benutzer

stimmen
0

ya..there sind einige Fehler ... im Grunde einen Knoten N von einem BST zu entfernen, ersetzen N mit dem minimalen Elemente im rechten Teilbaum von N.

Beantwortet am 14/01/2011 um 13:12
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more