2016-01-01 6 views
0

Вот мой код, чтобы найти позицию определенного элемента. И я использую двоичное дерево для хранения моего Словаря, я хочу знать, почему он показывает предупреждение для типа Comparable. Я должен использовать это в своем проекте, где element - строковый тип.Дерево двоичного поиска

public int get(Comparable element){ 
    return getPosition(element,root); 
} 
private int getPosition(Comparable element, TreeNode root){ 
    int count = 0; 
    if (root == null){ 
     return -1; 
    }else{ 
     Stack t = new Stack(); 
     t.push(root); 
     while(!t.empty()){ 
      TreeNode n = (TreeNode)t.pop(); 

      if(element.compareTo(n.value)==0){ 
       return count; 
      }else{ 
      if(n.getLeftTree()!=null){ 
       t.push(n.getLeftTree()); 
       count++; 
      } 
      if (n.getRightTree()!= null){ 
       t.push(n.getRightTree()); 
       count++; 
      } 
      } 
     } 
     return -1; 
    } 
} 
+2

Сопоставимый - это общий класс, который ожидает, что тип будет указан как 'Comparable element' – SMA

+2

(Это вернет длину пути от корня, а не к позиции в обходном порядке: вам может понадобиться _augment_.) – greybeard

ответ

0

Отсутствуют параметры типизации java generic <...>.

public int get(Comparable<?> element){ 
    return getPosition(element, root); 
} 

private int getPosition(Comparable<?> element, TreeNode root) { 
    int count = 0; 
    if (root == null) { 
     return -1; 
    } else { 
     Stack<TreeNde> t = new Stack<>(); 
     t.push(root); 
     while (!t.empty()) { 
      TreeNode n = t.pop(); 

      if (element.compareTo(n.value) == 0) { 
       return count; 
      } else { 
       if (n.getLeftTree() != null) { 
        t.push(n.getLeftTree()); 
        count++; 
       } 
       if (n.getRightTree() != null) { 
        t.push(n.getRightTree()); 
        count++; 
       } 
      } 
     } 
    } 
    return -1; 
} 

Однако алгоритм, кажется, не считает левую часть дерева до найденного элемента. Однако, если позиция не является индексом в отсортированных элементах, это может быть хорошо. (я не проверял правильность, так как нет ранней отметки <.) Если это было домашнее задание на работу, «нерекурсивное со стеком», переработайте рекурсивную версию. Вероятно, два вложенных цикла и сравнение по -1 и +1.

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