树,节点,树木的类型

时间:2013-02-10 15:13:11

标签: java binary-tree


我想创建一个树,检测插入是否是字符类型的对象,它将比较每个,并决定在哪里插入[右或左],(我知道它可以通过ascii表中的位置检测),如果插入是int的一个对象,它将执行相同的操作 我的问题:
1.我需要创建树并同时设置一个隔离区(例如,如果它是一个Chars树,它将是一个Chars_comperator,它检查Chars并且他实现了Comparator(java)。 我的代码现在只适用于int。因为我把对象转换为字符串,然后转到int,毕竟我比较并决定在哪里插入,这是我需要怎么做?还是有另一种方法可以照顾所有类型的物体? 这是我的代码以及我如何创建树,

树类

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 个答案:

答案 0 :(得分:1)

您可以在Comparable中传递insert(),而不是传递对象。 像Integer,String等标准类型已经实现了Conparable接口。

而不是使用if (a <b),您可以调用

compareTo(a,b);

参见Comparable的java doc。

如果出于任何原因,您希望继续传递Objectinsert(),您也可以通过不使用toString来解决这个问题,但是通过检查对象的类,然后转换:

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