0

バイナリ ツリーの幅優先トラバーサルの実装に問題があります。次の 2 行でクラス キャスト例外が発生し続けます。

        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);
    }
}
4

1 に答える 1

1

あなたが持っている:

public class TreeNode<E extends Comparable<E>>

これは、Einが を実装する必要があることを示しているだけであり、それ自体がTreeNode<E>実装する必要があるということではありません。そのためには、通常の方法で実装する必要があります。ComparableTreeNodeTreeNodeComparable

public class TreeNode<E extends Comparable<E>> implements Comparable<TreeNode<E>> 

そして、適切なオーバーライドを追加します。

于 2013-11-15T02:56:51.387 に答える