在树中查找最大元素

时间:2013-11-08 20:15:21

标签: java data-structures

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

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抛出的错误:

  

绑定不匹配:类型集合的通用方法sort(List)不适用于参数(ArrayList)。推断类型T不是有界参数

的有效替代

我知道我没有尝试对通用类型进行排序,但后来却不知道如何实现我想要的东西。

2 个答案:

答案 0 :(得分:3)

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

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

你应该读到这句话:“T类型的对象必须与T类型的其他对象相当。”

答案 1 :(得分:0)

要解决您的问题,您可以更改a的定义 ArrayList<T> a = new ArrayList<>();List<T> a = new ArrayList<>();

几条旁注:

  1. 你应该@Louis Wasserman建议 - 这对你的老师的执行方式有影响,它只是意味着BinaryTreeNode<Integer>是好的,但BinaryTreeNode<Object>不是。换句话说,你只是限制T可以 - 这种方式更清洁,并提供有关元素的前期信息
  2. 变量名称很重要,特别是如果你做学校作业,我最初在ab之间迷路了:(