我使用模板创建了一个二叉树。我为所有节点输入了整数值,我想在二叉树中找到最大元素。
以下是实施:
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());
有更好的方法吗?
答案 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