在Java中的树表示

时间:2016-01-07 11:43:28

标签: java algorithm tree artificial-intelligence

我正在研究与人工智能领域相关的论文工作。

我想制作一个实时推荐系统,所以我需要用树来表示决策。

我的主要问题是如何以有效的方式表示这棵树?我想提一下,树将自下而上从上到下穿过。树也不是二进制的,它拥有的节点很多(超过100)。

现在我创建了一个类似上面的节点类:

public class node {

    private String nodeName;
    private expectedValue ev;
    private boolean isLeaf;
    private boolean isRoot;
    private List<node> listOfChildren = new ArrayList<node>();
    private node parent;


    public node(String nodeName) {
        super();
        this.nodeName = nodeName;
    }


    public node(String nodeName, boolean isLeaf, boolean isRoot, List<node> listOfChildren, node parent) {
        super();
        this.nodeName = nodeName;
        this.isLeaf = isLeaf;
        this.isRoot = isRoot;
        this.listOfChildren = listOfChildren;
        this.parent = parent;
    }


    public void initializeNode(boolean isLeaf, boolean isRoot, List<node> listOfChildren, node parent) {
        this.isLeaf = isLeaf;
        this.isRoot = isRoot;
        this.listOfChildren = listOfChildren;
        this.parent = parent;
    }


    //getter and setter here......  
}

但我相信它不是代表树的最有效方式....

那么,用Java表示树的有效方法是什么?有没有办法动态创建树或者我必须逐个初始化它?

谢谢!

1 个答案:

答案 0 :(得分:2)

我认为您不需要将这么多变量传递给构造函数。它可能会简单得多。我建议为static设置一个单独的Node内部类(嵌套类)。还可以利用java泛型(<T>)这样的东西:

public class MyTree<T> {

    private Node<T> root;

    public MyTree(T rootData) {
        root = new Node<T>();
        root.data = rootData;
        root.children = new ArrayList<Node<T>>();
    }

    public static class Node<T> {
        private T data;
        private Node<T> parent;
        private List<Node<T>> children;
    }
}

作为旁注,JDK中实现了一种树结构,即使没有swing接口也可以使用。 (javax.swing.tree TreeModelTreeNode

相关问题