αφαιρέστε μέθοδος σε Java BST

ψήφοι
1

Έχω μια ερώτηση οφ ... Έχω να γράψω μια μέθοδο αφαίρεση για ένα δυαδικό δέντρο αναζήτησης, μέχρι στιγμής αυτό που έχω είναι κάτω, αλλά συνεχίζω να πάρει μια δέσμη των σφαλμάτων που σχετίζονται με τη μέθοδο αφαίρεση μου και δεν είμαι σίγουρος γιατί. ..would κάποιος παρακαλώ να είναι σε θέση να ελέγξει τον κωδικό μου. Ευχαριστώ. Επίσης, προσπάθησε να δημιουργήσει μια μέθοδο εύρημα, αλλά είμαι έχοντας κάποια προβλήματα με αυτό, καθώς και ... αυτό είναι όλο το δρόμο στο κάτω μέρος του κώδικα αφαίρεση μου.

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 );
   }
 */
Δημοσιεύθηκε 10/11/2009 στις 00:16
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
1

objείναι ένα παράδειγμα της Eόχι TreeNode383<E>έτσι ώστε να έχει καμία getLeft()ή getRight()μέθοδο. Και ακόμα κι αν το έκανε, θα είναι γραμμένο με λάθος τρόπο.

Και τι είναι root; Δεν μπορώ να δω μια δήλωση για το συγκεκριμένο οπουδήποτε.

Αυτή η σύνταξη δεν έχει νόημα, είτε:

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

setRight() είναι μια μέθοδος δεν είναι ένα πεδίο (Java δεν έχει ιδιότητες όπως η C #) Πλέον θα πρέπει να έχετε ένα κεφάλαιο «R» στο όνομα.

Έτσι, ίσως αυτό θα πρέπει να είναι

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

Δηλαδή, αν newDataείχε δηλωθεί, η οποία δεν είναι.

Υπάρχουν πάρα πολλά λάθη εδώ για να κατανοήσει τον κωδικό σας. Δοκιμάστε την εφαρμογή μιας λειτουργίας σε μια στιγμή.

Απαντήθηκε 10/11/2009 στις 00:26
πηγή χρήστη

ψήφοι
0

είναι ya..there ορισμένα σφάλματα ... βασικά, να αφαιρέσει ένα κόμβο N από μια BST, αντικαταστήστε Ν με την ελάχιστη στοιχείο στο δεξιό υποδένδρο του Ν

Απαντήθηκε 14/01/2011 στις 13:12
πηγή χρήστη

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