2017-08-10 8 views
1
package csci152.impl; 

import csci152.adt.Set; 
import csci152_classes.TreeNode; 

public class BSTSet<T extends Comparable> implements Set<T> { 

    private TreeNode<T> root; 
    private int size; 
    public BSTSet(){ 
     root = null; 
     size = 0; 
    } 


    @Override 
    public void add(T value) { 
     if(!contains(value)){ 
      addHelper(value, root); 
     } 
    }  

    private void addHelper(T value, TreeNode<T> n){ 
     if(n ==null){ 
      if(size ==0){ 
       root = new TreeNode<T>(value); 
      }else{   
      **n = new TreeNode<T>(value);**} 
      size++; 

      return; 
     } 
     if(value.compareTo(n.getValue())>0){ 
      addHelper(value, n.getRight()); 
     }else if(value.compareTo(n.getValue())<0){ 
      addHelper(value,n.getLeft()); 
     }    
    } 




    @Override 
    public boolean contains(T value) { 
     return containsHelper(value, root); 

    } 

    private boolean containsHelper(T value, TreeNode<T> node){ 
      if(node ==null){ 
      return false; 
     } 
     if(value.compareTo(node.getValue())>0){ 
      return containsHelper(value, node.getRight()); 
     }else if(value.compareTo(node.getValue())<0){ 
      return containsHelper(value,node.getLeft()); 
     }return true; 

    } 

    @Override 
    public boolean remove(T value) { 
     throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    } 

    @Override 
    public T removeAny() throws Exception { 
     throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    } 

    @Override 
    public int getSize() { 
     return size; 
    } 

    @Override 
    public void clear() { 
     size = 0; 
     root = null; 
    } 
    public String toString(){ 
     return toStringHelper(root); 
    } 

    private String toStringHelper(TreeNode<T> node){ 
     if(node == null){ 
      return ""; 
     } 
     return toStringHelper(node.getLeft()) + 
       node.getValue() + 
       toStringHelper(node.getRight()); 
    } 

} 

Le code souligné (n = new TreeNode (value);) ne fonctionne pas correctement. Donc, quand j'exécute du code, la taille est incrémentée, mais la racine est gardée nulle et le nouveau TreeNode n'est pas créé. Pourquoi est-ce? Où est mon erreur? Merci pour l'aide!!!BSTSet L'implémentation des méthodes contient (valeur T) et ajoute (valeur T) en utilisant la récursivité

Répondre

0

Vous devez d'abord déboguer votre programme, passez-le pas à pas et vérifiez chaque variable. C'est un exercice très important.

Mais pour répondre à votre question, la première fois que la racine est nulle, alors vous l'envoyez comme n, donc n est également nul, alors vous initialisez null avec TreeNode, c'est toujours null.