我想出了以下内容,尝试在java中创建一般树:
import java.util.*;
public class GeneralTree<T>{
private GeneralNode<T> root;
private GeneralNode<T> parent;
private GeneralNode<T> children;
public GeneralTree(){
this(null);
}
public GeneralTree(T d){
this(d, null);
}
/* I don't know what to do here. I want
* to assign a parent node to every
* tree I make, but if I keep the
* second parameter as GeneralNode<T>, wouldn't
* that mean I could only ever have one GeneralTree?
*/
public GeneralTree(T d, GeneralNode<T> p){
root = new GeneralNode<T>(d);
parent = p;
}
}
这非常适合存储信息。它允许我创建一个节点并在该节点中插入更多节点,同时在每个节点中具有一种类型的信息。不幸的是,似乎我无法在此类中引用“父”节点。基本上,我在向量中嵌套向量,所以我实际上无法引用持有节点的节点。
我确定我必须制作一个单独的GeneralTree类才能完成这项工作,但我不确定我该怎么做。我有想法将根分配为GeneralNode,并将“previous”和“next”节点分别作为父节点和子节点。这是我到目前为止所提出的:
let FIREBASE_REF = Firebase(url: BASE_URL)
var CURRENT_USER: Firebase
{
let userID = NSUserDefaults.standardUserDefaults().valueForKey("uid") as! String
let currentUser = Firebase(url: "\(FIREBASE_REF)").childByAppendingPath("users").childByAppendingPath(userID)
return currentUser!
}
我已经对我困惑的构造函数写了评论。我希望我已经很好地解释了我的问题。如果有人可以帮助我,那将是伟大的。
答案 0 :(得分:0)
正如@JohnBollinger所说,你可以在每个节点内保留父节点的引用。如果这样做,则必须在addChild
方法中设置父节点。
import java.util.Vector;
public class GeneralNode<T>{
private T data = null;
private Vector<GeneralNode<T>> children =
new Vector<GeneralNode<T>>();
private GeneralNode<T> parentNode;
//constructors
private void setParent(GeneralNode<T> parentNode) {
this.parentNode = parentNode;
}
public void addChild(T d){
GeneralNode<T> c = new GeneralNode<T>(d);
c.setParent(this);
this.children.add(c);
}
public void addChild(GeneralNode<T> c){
c.setParent(this);
this.children.add(c);
}
//other methods
}