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

} 

下划线代码(n = new TreeNode(value);)不能正常工作。因此,当我运行代码时,大小会增加,但root保持为空,并且不会创建新的TreeNode。为什么是这样?我的错误在哪里?感谢帮助!!!BSTSet方法的实现包含使用递归的(T值)和添加(T值)

回答

0

首先你应该调试你的程序,一步一步地检查它并检查每个变量。这是一个非常重要的练习。

但是要回答你的问题,第一次root是null,那么你把它作为n发送,所以n也是null,那么你用TreeNode初始化null,它仍然是null。