我在为二叉树实现宽度优先遍历时遇到问题。我一直在这两行获得一个类强制转换异常:
if(node.left != null) queue.offer(node.left);
if(node.right != null) queue.offer(node.right);
异常说:“TreeNode无法强制转换为java.lang.Comparable” 我需要针对此类的其他方法的extends Comparable,有关如何解决此问题的任何建议吗?谢谢!
public class TreeNode<E extends Comparable<E>> {
private TreeNode<E> left;
private TreeNode<E> right;
private E value;
public TreeNode(E value)
{
this.value = value;
}
public void breadthFirstTraversal(TreeNode<E> root, ArrayList<E> breadthList)
{
Queue<TreeNode<E>> queue = new PriorityQueue<TreeNode<E>>();
if (root == null)
return;
queue.clear();
queue.offer(root);
while(!queue.isEmpty())
{
TreeNode<E> node = queue.remove();
breadthList.add(node.value);
if(node.left != null) queue.offer(node.left);
if(node.right != null) queue.offer(node.right);
}
}
答案 0 :(得分:1)
你有:
public class TreeNode<E extends Comparable<E>>
这只表示E
中的TreeNode<E>
应该实现Comparable
,而不是TreeNode
本身应该实现的TreeNode
。为此,您需要以通常的方式Comparable
实现public class TreeNode<E extends Comparable<E>> implements Comparable<TreeNode<E>>
:
{{1}}
并添加适当的覆盖。