0


我想创建一棵树来检测插入是否是字符类型的对象,它将比较每个对象并决定插入的位置[右或左],(我知道它可以通过 ascii 表中的位置检测),如果插入是 int 的对象,它将执行相同的操作。
我的问题:
1. 我需要创建树并同时设置一个比较器(例如,如果它是一个 Chars 树,它将是一个 Chars_comperator 来检查 Chars 并且他实现了 Comparator ( of java )。?2.我的现在的代码只适用于 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);


}

}
谢谢!

4

1 回答 1

1

而不是传递一个对象,你可以传递一个Comparablein insert()。Integer、String 等标准类型已经实现了 Conparable 接口。

而不是使用if (a <b) 你打电话

compareTo(a,b);

请参阅 Comparable 的 java 文档。

如果出于任何原因,您想继续使用 Passing an Objectto insert(),您也可以通过不使用 toString 来解决这个问题,而是通过检查对象的类,然后进行强制转换:

if (object instanceof Integer) {
    int val = ((Integer) object).intValue();
    // now compare 
} else if (object instance of String) {
     String val .....
    // use val.compareTo()
}
于 2013-02-10T15:18:29.093 回答