supprimer procédé java BST

voix
1

J'ai une question hw ... Je dois écrire une méthode de suppression d'un arbre de recherche binaire, jusqu'à ce que j'ai est ci-dessous, mais je continue à obtenir un tas d'erreurs associées à ma méthode remove et je ne sais pas pourquoi. ..would quelqu'un s'il vous plaît être en mesure de vérifier mon code. Je vous remercie. J'ai essayé aussi de créer une méthode de recherche, mais je vais avoir des problèmes avec ça aussi ... qui est tout le chemin en bas de mon code de suppression.

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 );
   }
 */
Créé 10/11/2009 à 00:16
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
1

objest une instance de Enon TreeNode383<E>il n'a pas getLeft()ou getRight()méthode. Et même si elle l'a fait, vous orthographié mal.

Et ce qui est root? Je ne vois pas une déclaration pour que partout.

Cette syntaxe n'a pas de sens non plus:

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

setRight() est une méthode pas un champ (Java ne possède pas de propriétés comme C #) De plus, vous avez besoin d'un « R » majuscule dans le nom.

Alors peut-être que cela devrait être

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

qui est, si newDataa été déclarée, qu'il n'est pas.

Il y a trop d'erreurs ici pour donner un sens de votre code. Essayez la mise en œuvre d'une fonction à la fois.

Créé 10/11/2009 à 00:26
source utilisateur

voix
0

ya..there sont des erreurs ... au fond, pour supprimer un nœud N à partir d'un BST, remplacez le N par l'élément minimum dans le sous-arbre droit de N.

Créé 14/01/2011 à 13:12
source utilisateur

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