2013-02-10 3 views
0


Я хочу создать дерево, которое обнаружит, является ли вставка объектом типа. Символы будут сравнивать каждый и решать, куда вставлять [вправо или влево], (я знаю, что это может определить по позиции в таблице ascii), и если вставка является объектом int, она выполнит ту же операцию.
Мои вопросы:
1. Мне нужно создать дерево и в то же время установить компартор (например, если это дерево Chars, это будет Chars_comperator, который проверяет Chars и реализует Comparator (из java) .? 2. Мой код теперь хорош только для int. Becuase я беру объект для преобразования в строку, а затем в int, и после всего этого я сравниваю и решаю, куда вставлять, вот как мне это нужно? другой способ сделать это, что может заботиться все виды объектов? Вот мой код и как я создать дерево,
Дерево, узлы, типы деревьев

класса Tree

public class tree { 

bNode root; 
public tree() { 
    this.root = null; 
} 
public boolean isEmpty(){ 
    return root==null; 
} 
public void insert(Object data) 
{ 
    if(isEmpty()) 
     this.root = new bNode(data); 
    else 
     this.root.insert(data); 

    } 
} 


bNode Класс

public class bNode { 
protected Object data; 
protected bNode left; 
protected bNode right; 


public bNode(Object data) { 
    this.data = data; 
    this.left = null; 
    this.right = null; 
} 

public void insert(Object data){ 

    if(Integer.parseInt(data.toString())<Integer.parseInt(this.data.toString())){ 
     if(this.left==null) 
      this.left = new bNode(data); 
     else 
      this.left.insert(data); 

    } 
    else{ 
     if(this.right==null) 
      this.right = new bNode(data); 
     else 
      this.right.insert(data); 



    } 
} 

Основной класс

public class Main { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    tree x = new tree(); 
    char a = 'G'; 
    x.insert(a); 
    x.insert(60); 
    x.insert(40); 
    x.insert(30); 
    x.insert(59); 
    x.insert(61); 
    x.root.printTree(x.root); 


} 

}
Спасибо!

ответ

1

вместо передачи объекта, вы можете передать Comparable в insert(). Стандартный тип типа Integer, String и т. Д. Уже реализует интерфейс Conparable.

вместо использования if (a <b) вы звоните

compareTo(a,b); 

См Java документ сопоставимого.

Если по какой-либо причине, вы хотите остаться с пропусканием Object к insert(), вы можете решить, что не используя ToString, но, проверив класс объекта, а затем литье:

if (object instanceof Integer) { 
    int val = ((Integer) object).intValue(); 
    // now compare 
} else if (object instance of String) { 
    String val ..... 
    // use val.compareTo() 
} 
+0

Если Я создаю дерево, например BinaryTree x = new BinaryTree (comp) и comp is Comparator comp = new IntegerComparator, поэтому теперь я точно знаю, что дерево будет деревом int, поэтому все проверки будут на int, тогда мне не нужно чтобы спросить весь вопрос (instanceof ..), я имею в виду то, что я действительно хочу, это создать функции, которые реализуют компаратор, каждая функция проверяет другую вещь, например, instanceof, например, если я создал IntegerComparator, я знаю, что каждый объект передаст compareTo целочисленного компаратора. я думаю, что это более эффективный способ сделать это. не так ли? –

+0

нет, только новый BinaryTree(); В противном случае вы должны больше узнать о дженериках. Но вставка (Comparable comp); использует сопоставимые – raceworm

+0

, если я хочу хранить объекты в качестве символов, которые я вставляю, как есть? –

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