2017-08-10 2 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()); 
    } 

} 

Der Code unterstrichen (n = new TreeNode (value);) nicht richtig funktioniert. Wenn ich also Code ausführe, wird die Größe inkrementiert, aber root wird auf null gesetzt und ein neuer TreeNode wird nicht erstellt. Warum ist das? Wo ist mein Fehler? Danke für die Hilfe!!!BSTSet Implementierung von Methoden enthält (T-Wert) und addieren (T-Wert) unter Verwendung der Rekursion

Antwort

0

Zuerst sollten Sie Ihr Programm debuggen, Schritt für Schritt durchgehen und jede Variable überprüfen. Das ist eine sehr wichtige Übung.

Aber um Ihre Frage zu beantworten, wenn root zum ersten Mal null ist, dann senden Sie es als n, also ist n auch null, dann initialisieren Sie null mit TreeNode, es ist immer noch null.

Verwandte Themen