BSTSet方法的实现包含使用递归的(T值)和添加(T值)
问题描述:
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值)
答
首先你应该调试你的程序,一步一步地检查它并检查每个变量。这是一个非常重要的练习。
但是要回答你的问题,第一次root是null,那么你把它作为n发送,所以n也是null,那么你用TreeNode初始化null,它仍然是null。