我正在研究与人工智能领域相关的论文工作。
我想制作一个实时推荐系统,所以我需要用树来表示决策。
我的主要问题是如何以有效的方式表示这棵树?我想提一下,树将自下而上从上到下穿过。树也不是二进制的,它拥有的节点很多(超过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表示树的有效方法是什么?有没有办法动态创建树或者我必须逐个初始化它?
谢谢!
答案 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 TreeModel和TreeNode)