二叉树中的最大元素(尝试root.getData()时出错)

时间:2018-02-19 07:17:13

标签: java tree max binary-tree element

我使用模板创建了一个二叉树。我为所有节点输入了整数值,我想在二叉树中找到最大元素。

以下是实施:

public class BinaryTreeNode<T> {
    private T data;
    BinaryTreeNode right;
    BinaryTreeNode left;

    public BinaryTreeNode(T data) {
        this.data = data;
        this.right = null;
        this.left = null;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    public BinaryTreeNode getRight() {
        return right;
    }

    public void setRight(BinaryTreeNode right) {
        this.right = right;
    }

    public BinaryTreeNode getLeft() {
        return left;
    }

    public void setLeft(BinaryTreeNode left) {
        this.left = left;
    }

    public int findMax(BinaryTreeNode root){
        int max= 0;
        if(root==null){
            return 0;
        } else {
            int left= findMax(root.left);
            int right= findMax(root.right);

            max= Math.max(left,right);
            if(max> root.getData()){
                max= root.getData();
            }
            return max;
        }
    }
}

我收到以下错误:

  

不兼容的类型:required int found java.lang.Object。

我在修改后的版本中写了这个:

int data= Integer.valueOf((String)root.getData());

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

root.getData()具有通用类型T。这意味着您无法假定它是Integer,您无法使用Math.max()确定两个节点中的哪一个具有更高的值,而findMax()应该返回{{} 1}},而不是T

要查找max元素,您必须要求int,这样才能使用T extends Comparable<T>比较两个BinaryTreeNode的数据,或者您应该通过{@ 1}}实例到树的构造函数,这样您就可以使用compareTo()来比较Comparator<T>的数据。

您还必须避免使用原始类型BinaryTreeNode。在所有方法中将compare()替换为BinaryTreeNode。否则,BinaryTreeNode<T>等方法调用将返回root.getData()而不是Object

使用T

Comparable