Java 二叉树中的成功者 class ElemDrzewa{ 最终要素; ElemDrzewa lewy; ElemDrzewa prawy; ElemDrzewa rodzic; ElemDrzewa(T elem) { this.elem=elem; lewy=null; prawy=null; } } 公共类Drzewo{ 私营企业ElemDrzewa korzen; 公共Drzewo(){ korzen=null; } 公共ElemDrzewa搜索(T elem){ ElemDrzewa实际值=korzen; while(实际值!=null&&actual.elem!=elem) 如果(实际要素与(要素)>0)实际=actual.lewy; else-actual=actual.prawy; 返回实际值; } 私有ElemDrzewa min(ElemDrzewa w){ while(w.lewy!=null) w=w.lewy; 返回w; } 私人ElemDrzewa max(ElemDrzewa w){ while(w.prawy!=null) w=w.prawy; 返回w; } 私有ElemDrzewa nast(ElemDrzewa w){ 如果(w.prawy!=null)返回最小值(w.prawy); ElemDrzewa tmp=w.rodzic; while(w!=null&&w.lewy!=tmp) w=tmp; tmp=tmp.rodzic; 返回tmp; } 私人ElemDrzewa poprz(ElemDrzewa w){ 如果(w.lewy!=null)返回最大值(w.lewy); ElemDrzewa tmp=w.rodzic; while(w!=null&&w.prawy!=tmp) w=tmp; tmp=tmp.rodzic; 返回tmp; } 公共电气设备(T电气设备){ ElemDrzewa w=此.search(elem); ElemDrzewa rodzic=w.rodzic; ElemDrzewa tmp; 如果(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; } 否则{ 如果(w.lewy!=null)tmp=w.lewy; else tmp=w.prawy; } 如果(tmp!=null)tmp.rodzic=rodzic; 如果(rodzic==null)korzen=tmp; 如果(rodzic.lewy==w)rodzic.lewy=tmp; else-rodzic.prawy=tmp; 返回w; } }
这是我的代码,我对privateJava 二叉树中的成功者 class ElemDrzewa{ 最终要素; ElemDrzewa lewy; ElemDrzewa prawy; ElemDrzewa rodzic; ElemDrzewa(T elem) { this.elem=elem; lewy=null; prawy=null; } } 公共类Drzewo{ 私营企业ElemDrzewa korzen; 公共Drzewo(){ korzen=null; } 公共ElemDrzewa搜索(T elem){ ElemDrzewa实际值=korzen; while(实际值!=null&&actual.elem!=elem) 如果(实际要素与(要素)>0)实际=actual.lewy; else-actual=actual.prawy; 返回实际值; } 私有ElemDrzewa min(ElemDrzewa w){ while(w.lewy!=null) w=w.lewy; 返回w; } 私人ElemDrzewa max(ElemDrzewa w){ while(w.prawy!=null) w=w.prawy; 返回w; } 私有ElemDrzewa nast(ElemDrzewa w){ 如果(w.prawy!=null)返回最小值(w.prawy); ElemDrzewa tmp=w.rodzic; while(w!=null&&w.lewy!=tmp) w=tmp; tmp=tmp.rodzic; 返回tmp; } 私人ElemDrzewa poprz(ElemDrzewa w){ 如果(w.lewy!=null)返回最大值(w.lewy); ElemDrzewa tmp=w.rodzic; while(w!=null&&w.prawy!=tmp) w=tmp; tmp=tmp.rodzic; 返回tmp; } 公共电气设备(T电气设备){ ElemDrzewa w=此.search(elem); ElemDrzewa rodzic=w.rodzic; ElemDrzewa tmp; 如果(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; } 否则{ 如果(w.lewy!=null)tmp=w.lewy; else tmp=w.prawy; } 如果(tmp!=null)tmp.rodzic=rodzic; 如果(rodzic==null)korzen=tmp; 如果(rodzic.lewy==w)rodzic.lewy=tmp; else-rodzic.prawy=tmp; 返回w; } },java,binary-search-tree,Java,Binary Search Tree,这是我的代码,我对privateElemDrzewa-nast(ElemDrzewa-w) 错误为Drzewo中的nast(ElemDrzewa)不能应用于(T) 最小值用于查找最小值,最大值用于查找最大值,nast用于查找成功,poprz用于查找先驱者您不能在带有参数的方法del中调用this.nast(ElemDrzewa w),因为elem属于T类型,并且T不扩展ElemDrzewa这一行: class ElemDrzewa<T extends Comparable<T>
ElemDrzewa-nast(ElemDrzewa-w)
错误为Drzewo中的nast(ElemDrzewa)不能应用于(T)
最小值用于查找最小值,最大值用于查找最大值,nast用于查找成功,poprz用于查找先驱者您不能在带有参数的方法
del
中调用this.nast(ElemDrzewa w)
,因为elem
属于T
类型,并且T
不扩展ElemDrzewa
这一行:
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;
}
}
不会编译,因为actual.elem
的类型为T
,编译器对T
一无所知。并非所有对象
s都有比较
方法;要使其工作,编译器需要知道T
实现了Comparable
。如果这是您的意图,即您只能将该类与实现Comparable
的类型一起使用,请将第一行更改为
if(actual.elem.compareTo(elem)>0) actual = actual.lewy;
公共类Drzewo{
编辑:原来的帖子现在已经被编辑成这样了,但不是由原来的提问者写的。所以我的答案可能与此无关。那些应该是
class ElemDrzewa
和public class Drzewo
?还是应该删除额外的
字符?我尝试了第一种方法,然后我决定ink我在不同的位置得到的错误与你得到的不同。对于阅读本文的其他人:drzewo=tree,lewy=left,prawy=right,rodzic=father,korzen=root,nast=next
public class Drzewo<T extends Comparable<T>> {