【发布时间】:2021-02-11 04:52:22
【问题描述】:
我试图在树中找到一个节点的最小值,为了检测是否有较小的值,我正在使用compareTo() 函数,如下所示:
@SuppressWarnings("unchecked")
public static Object min(TreeNode t)
{
if(t == null) {
return null;
}
Comparable<TreeNode> min = (Comparable<TreeNode>) t;
if(t.getLeft() != null) {
Comparable<TreeNode> leftMin = (Comparable<TreeNode>) min(t.getLeft());
if( ((Comparable<TreeNode>)leftMin).compareTo( (Comparable<TreeNode>)min) < 0) {
min = leftMin;
}
}
if(t.getRight() != null) {
Comparable<TreeNode> rightMin = (Comparable<TreeNode>) min(t.getRight());
if( ((Comparable<TreeNode>)rightMin).compareTo( (Comparable<TreeNode>)min) < 0) {
min = rightMin;
}
}
return min;
}
但是,我收到以下错误:
error: incompatible types: Comparable<TreeNode> cannot be converted to TreeNode
在 if 语句中。
有人告诉我必须将 Object 强制转换为 Comparable 才能调用 compareTo()
我已经尝试查看这个类似的question,但我无权更改 TreeNode 类
树节点类:
public class TreeNode
{
private Object value;
private TreeNode left, right;
public TreeNode(Object initValue)
{
value = initValue;
left = null;
right = null;
}
/*methods*/
}
我也尝试过:if(leftMin.compareTo(min) < 0) 但是会产生相同的错误。
您知道如何正确转换和转换以下类吗?
【问题讨论】:
-
如果你正确使用泛型,你根本不需要任何转换。
标签: java casting tree binary-tree comparable