2013-11-13 5 views
0

Я пытаюсь создать это дерево в Java, но застрял и не могу понять, как продолжить. Вот код, который я до сих пор:Создание двоичного дерева двоичного поиска в Java

public class BTNode<E> 
{ 
private E data; 
private BTNode<E> left; 
private BTNode<E> right; 

public BTNode(E newData, BTNode<E> newLeft, BTNode<E> newRight) 
{ 
    setData(newData); 
    setLeft(newLeft); 
    setRight(newRight); 
} 

public E getData() 
{ 
    return data; 
} 

public BTNode<E> getLeft() 
{ 
    return left; 
} 

public BTNode<E> getRight() 
{ 
    return right; 
} 

public void inorderPrint() 
{ 
    if(left != null) 
     left.inorderPrint(); 

    System.out.println(data); 

    if(right != null) 
     right.inorderPrint(); 
} 

public void setData(E newData) 
{ 
    data = newData; 
} 

public void setLeft(BTNode<E> newLeft) 
{ 
    left = newLeft; 
} 

public void setRight(BTNode<E> newRight) 
{ 
    right = newRight; 
} 

}

public class Tree<E extends Comparable<E>> 
{ 
private BTNode<E> root; 
private int manyNodes; 

public Tree() 
{ 

} 

public void add(E element) 
{ 
    BTNode<E> newLeft = null; 
    BTNode<E> newRight = null; 

    if(root == null) 
     root = new BTNode<E>(element, newLeft, newRight); 

    else 
    { 
     BTNode<E> cursor = new BTNode<E>(element, newLeft, newRight); 
     cursor = root; 
     boolean done = false; 

     while(done = false) 
     { 
      if (element.compareTo(cursor.getData()) <= 0) 
      { 
       if(cursor.getLeft() == null) 
       { 
        cursor.setLeft(element); //create a new node from left 
        done = true; 
       } 

       else 
        cursor = cursor.getLeft(); 
      } 

      else 
      { 
       if(cursor.getRight() ==null) 
       { 
        cursor.setRight(element); //create a new node from right 
        done = true; 
       } 
       else 
        cursor = cursor.getRight(); 
      } 
     } 
    } 

} 

public int size() 
{ 
    return manyNodes; 
} 

public BTNode<E> getRoot() 
{ 
    return root; 
} 

}

Проблема создания левого и правого узлов, это не давая мне, потому что типы различны. Также я не уверен, что добавить в конструктор дерева.

ответ

1

Методы

public void setLeft(BTNode<E> newLeft) { 
    left = newLeft; 
} 
public void setRight(BTNode<E> newRight) { 
    right = newRight; 
} 

которые ожидают BTNode объектов, но вы называя их как

cursor.setLeft(element); 

где element имеет типа E и E является, насколько компилятор обеспокоен, типа который распространяется на Comparable<E>. У вас есть несоответствие типа. Оберните свой element в объекте BTNode и передайте это.

+0

Вы имеете в виду вот так: cursor.setLeft ((BTNode )); – user2985986

+0

@user Нет, это называется литье. Я имею в виду создание нового объекта «BTNode» и присвоение ему элемента в качестве «данных». –

+0

BTNode левый = новый BTNode (элемент, null, null); ? Я все еще не слежу. Я пытаюсь создать новый узел слева, а не данные. извините – user2985986

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