我有一棵以这种方式实现节点的二叉树:

public class BinaryTreeNode<T>
{
    T element;
    BinaryTreeNode<T> leftChild;  // left subtree
    BinaryTreeNode<T> rightChild; // right subtree
}


而且我正在尝试搜索保存在树中的最大值,但是未能创建成功的方法来实现这一目标。这是我尝试过的:

public void maxElement(Method visit)
{
    ArrayList<T> a = new ArrayList<>();
    BinaryTreeNode<T> b = root;

    while(b != null)
    {
        try
        {
            visit.invoke(null, b); //This visit Method is to traverse the nodes
        }
        catch(Exception e)
        {
            System.out.println(e);
        }

        if(b.leftChild != null)
            a.add(b.leftChild.element);
        if(b.rightChild != null)
            a.add(b.rightChild.element);

        Collections.sort(a); //Here is where it fails
        System.out.println(a.get(0));
    }
}


这是IDE引发的错误:


  绑定不匹配:类型为Collections的通用方法sort(List)不适用于参数(ArrayList)。推断的类型T不是有效替代边界参数


我知道我无法对通用类型进行排序,但是然后不知道如何实现我想要的。

最佳答案

如果期望T是支持比较的类型,那么您应该声明

public class BinaryTreeNode<T extends Comparable<T>> {


您应该这样说:“类型T的对象必须与其他类型T的对象相当。”

10-04 14:53