eliminați metoda în BST java

voturi
1

Am o întrebare ... hw am să scrie o metodă de eliminare pentru un arbore binar de căutare, până în prezent ceea ce am este mai jos, dar primesc în continuare o grămadă de erori asociate cu metoda mea de eliminare și nu sunt sigur de ce. ..would cineva vă rugăm să poată verifica codul meu. Mulțumesc. De asemenea, am încercat să creeze o metodă de descoperire dar am unele probleme cu asta la fel de bine ... care este tot drumul de la partea de jos a codului meu de eliminare.

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 );
   }
 */
Întrebat 10/11/2009 la 00:16
sursa de către utilizator
În alte limbi...                            


2 răspunsuri

voturi
1

objeste o instanta a Enu TreeNode383<E>asa ca nu are getLeft()sau getRight()metodă. Și chiar dacă a făcut -o , l - ați scris greșit.

Și ce - i root? Nu pot vedea o declarație pentru că oriunde.

Această sintaxă are nici un sens, fie:

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

setRight() este o metodă nu un câmp (Java nu are proprietăți cum ar fi C #) Plus ai nevoie de un capital „R“ în numele.

Deci, poate că ar trebui să fie

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

adică, în cazul în care a newDatafost declarată, care nu este.

Sunt prea multe erori aici pentru a face sens al codului. Puteți încerca să implementați o funcție la un moment dat.

Publicat 10/11/2009 la 00:26
sursa de către utilizator

voturi
0

ya..there sunt unele erori ... practic, pentru a elimina un nod N dintr-o BST, înlocuiți N cu elementul minim în subarborele drept al N.

Publicat 14/01/2011 la 13:12
sursa de către utilizator

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