2016-10-25 7 views
0

一般的なバイナリ検索ツリーのコードは次のとおりです。私はすでに検索機能を実装していません。なぜなら、すでにコードに指摘されている1行目、2行目、3行目にエラーがあるからです。エラーは言う:Java汎用バイナリ検索ツリーはTタイプを比較できません

オペレータ<は、引数の型(S)Tに対して定義されていない、T.

だから、私は、コンパイラはこれらのタイプまたは類似のものを比較する方法を知っていないと思います。さて、ちょっとした研究をしましたが、ComperableとcompareToメソッドとは何か関係があることがわかりましたが、Javaルーキーとしてはコードを修正できませんでした。どのようにそれを修正するための任意のアイデア? <<=>=>などの

import java.util.*; 
import java.io.*; 

public class Tree<T> 
    { private Node<T> root = null; 

    public boolean insert(T element) 
     { if (isEmpty()) 
      { root = new Node<T>(element); 
      return true; }// empty tree, Node could be inserted, return true 

     Node<T> current = root; // start at root 
     Node<T> parent;   // the current Node's parent 

     do 
      {parent = current; 

      if (element < current.element) // 1 
       current = current.left; // go to left 
       else if (element > current.element) //2 
       current = current.right; // go to right 
       else 
       return false; } // duplicates are NOT allowed, element could not be inserted -> return false 
      while (current != null); 

     Node<T> node = new Node<T>(element); 

     if (element < current.element) // 3 
      parent.left = node; 
      else 
      parent.right = node; 

     return true; } // node successfully inserted 


    public boolean isEmpty() { return root == null; } 

    private static class Node<T> // static member class 
     { Node<T> left = null; 
     Node<T> right = null; 
     final T element; 

     Node(T element) { this.element = element; } } 

    } 
+1

あなたは 'Comparable'実装するための 'T'制約する必要があります:'ツリーは '拡張>を。次に、 'element.compareTo(current.element)<0'を使用します。 –

+0

@Andy Turner Thaks男、それはそれを修正! –

答えて

1

比較演算子は、数値のみのタイプのために定義されています。他のタイプを比較すること

、あなたはどちらかを行う必要があります。

  • は、例えば、Comparableを実装する型を使用しますStringComparator

    if (element.compareTo(current.element) < 0) { 
    
  • パス、比較することができます:

    public class Tree<T extends Comparable<T>> 
    

    これは、あなたがcompareToメソッドを呼び出すことができることを意味します。あなたは、型変数に制約を追加することによってこれを行うことができます型のインスタンス:

    public boolean insert(T element, Comparator<? super T> comparator) 
    

    そして要素を比較するためにこれを使用します。

    if (comparator.compare(element, current.element)) { 
    
+0

しかし、私が2番目のオプションをコンパレータで使うと、挿入(2.3)の代わりに要素を挿入したいときに、どうやって挿入関数を呼び出すのですか?挿入(2.3、???)? –

+0

コンパレータをコンストラクタパラメータにします。 –

+0

私は理解していません... –

関連する問題