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);)无法正常工作。因此,当我运行代码时,大小会增加,但根保持为空并且不会创建新的 TreeNode。为什么是这样?我的错误在哪里?感谢您的帮助!!!
最佳答案
首先你应该调试你的程序,一步一步地检查它并检查每个变量。这是一个非常重要的练习。
但是要回答你的问题,第一次 root 为 null,然后你将其作为 n 发送,因此 n 也为 null,然后你用 TreeNode 初始化 null,它仍然为 null。
关于java - BSTSet 使用递归实现方法 contains(T value) 和 add(T value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45611211/