class ElemDrzewa<T extends Comparable<T>>{
final T elem;
ElemDrzewa<T> lewy;
ElemDrzewa<T> prawy;
ElemDrzewa<T> rodzic;
ElemDrzewa(T elem)
{
this.elem = elem;
lewy = null;
prawy = null;
}
}
public class Drzewo<T extends Comparable<T>>{
private ElemDrzewa<T> korzen;
public Drzewo(){
korzen = null;
}
public ElemDrzewa<T> search(T elem){
ElemDrzewa<T> actual = korzen;
while(actual!=null && actual.elem != elem)
if(actual.elem.compareTo(elem)>0) actual = actual.lewy;
else actual = actual.prawy;
return actual;
}
private ElemDrzewa<T> min(ElemDrzewa<T> w){
while(w.lewy != null)
w = w.lewy;
return w;
}
private ElemDrzewa<T> max(ElemDrzewa<T> w){
while(w.prawy != null)
w = w.prawy;
return w;
}
private ElemDrzewa<T> nast(ElemDrzewa<T> w){
if(w.prawy != null) return min(w.prawy);
ElemDrzewa<T> tmp = w.rodzic;
while(w!=null && w.lewy!= tmp)
w = tmp;
tmp = tmp.rodzic;
return tmp;
}
private ElemDrzewa<T> poprz(ElemDrzewa<T> w){
if(w.lewy != null) return max(w.lewy);
ElemDrzewa<T> tmp = w.rodzic;
while(w!=null && w.prawy!= tmp)
w = tmp;
tmp = tmp.rodzic;
return tmp;
}
public ElemDrzewa<T> del(T elem){
ElemDrzewa<T> w = this.search(elem);
ElemDrzewa<T> rodzic = w.rodzic;
ElemDrzewa<T> tmp;
if(w.lewy!=null && w.prawy!=null){
tmp = this.del(this.nast(elem).elem);
tmp.lewy = w.lewy;
if(tmp.lewy!=null)
tmp.lewy.rodzic = tmp;
tmp.prawy = w.prawy;
if(tmp.prawy!=null)
tmp.prawy.rodzic = tmp;
}
else{
if(w.lewy!=null) tmp = w.lewy;
else tmp = w.prawy;
}
if(tmp!=null) tmp.rodzic = rodzic;
if(rodzic == null) korzen = tmp;
else if(rodzic.lewy == w) rodzic.lewy = tmp;
else rodzic.prawy = tmp;
return w;
}
}
这是我的代码,我对私人ElemDrzewa<T> nast(ElemDrzewa<T> w)
错误为nast(ElemDrzewa<T>) in Drzewo<T> cannot be applied to (T)
min是寻找最小值,max是最大值,nast for find succesor,poprz for find predecesor
答案 0 :(得分:0)
您无法使用参数this.nast(ElemDrzewa<T> w)
调用方法del
中的elem
,因为elem
的类型为T
且T
不属于ElemDrzewa<T>
延长{{1}}。
答案 1 :(得分:0)
这一行:
if(actual.elem.compareTo(elem)>0) actual = actual.lewy;
将无法编译,因为actual.elem
具有类型T
,并且编译器对T
一无所知。并非所有Object
都有compareTo
个方法;为了使其工作,编译器需要知道T
实现了Comparable
。如果这是您的意图,那么您只能将此类用于实现Comparable
的类型,请将第一行更改为
public class Drzewo<T extends Comparable<T>> {
编辑:现在已对原始帖子进行了编辑,以使该行看起来像这样,但不是原始提问者。所以我的答案可能也可能不相关。