2016-10-25 8 views
0

Вот код для двоичного дерева поиска. Я еще не реализовал функцию поиска, потому что у меня уже были ошибки в строках: 1, 2 и 3, которые я указал в коде. Ошибка говорит:Java Generic Binary Search Tree не может сравнивать типы 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

Вы должны ограничить 'T' реализовать' Comparable': 'Tree >'. Затем используйте 'element.compareTo (current.element) <0'. –

+0

@ Энди Тернер нападает на человека, который его исправил! –

ответ

1

Операторы сравнения, как <, <=, >= и > определены только для числовых типов.

Для сравнения других типов, вам необходимо либо:

  • Используйте тип, который реализует Comparable, например, String. Вы можете сделать это, добавив ограничение на переменную типа:

    public class Tree<T extends Comparable<T>> 
    

    Это означает, что вы можете вызвать compareTo метод:

    if (element.compareTo(current.element) < 0) { 
    
  • Pass в Comparator, который способен сравнить экземпляры типа:

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

    , а затем использовать это для сравнения элементов:

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

, но если я перейду ко второму варианту с помощью компаратора, то когда я хочу вставить элемент, вместо того, чтобы вставить (2.3), например, как мне вызвать функцию вставки? вставить (2,3, ???)? –

+0

Сделать компаратор параметром конструктора. –

+0

Я не ... Я не понимаю –

Смежные вопросы