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; } }

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; } },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>

这是我的代码,我对private
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>> {