我正在尝试创建一个递归树,parent
引用child
而child
引用parent
。我想要做的是从child
whitout可变成员回溯树。这很难,因为给孩子一个对构造函数中parent
的引用需要已经创建parent
实例。
我只能想到两种方式,而且两种方式都不太好。第一种方式是休假
之后,child引用了parent,并且不能使用setParent()。
第二种方法是创建parent
和child
完全分开,但将它们保存在某种数据结构中,这种数据结构可以搜索某个孩子的parent
,而另一种方式则可以搜索。{/ p>
如果有更好的方法,请教我。我主要在java工作,但问题很笼罩。
答案 0 :(得分:1)
有几种方法可以做到这一点,但我可能会给父母一个createChild
方法,该方法创建一个新节点,将自己作为父节点传递,并在返回之前将此子节点添加到自身。你暗示的问题是,由于某种原因,让一个已经存在的父母很难,但如果你正在做一棵树,你应该知道谁的父母是谁的。如果不这样,树可能不是您正在寻找的数据结构。
我可能会对其构建,以便您的Element
构造函数可以使用另一个Element
。如果是这样,它会将私有变量(parent
)设置为其他Element
。如果在没有传入父元素的情况下创建它,它将永远不会有父元素。因此,类可能看起来像这样(显然省略了访问器和任何其他东西):
public class Element {
private Element parent;
private ArrayList<Element> children;
// Constructor for a node with NO parent
public Element() {
this(null);
}
// Constructor for a node WITH a parent
public Element(Element parent) {
this.parent = parent;
this.children = new ArrayList<Element>();
}
// Method to create a child element.
public Element createChild() {
Element ch = new Element(this);
this.children.add(ch);
return ch;
}
}
如果你的问题是你试图通过从一个孩子追溯到某个祖先来建立一个“树”,那么我建议你注意到它实际上是一个列表,而不是一棵树。您可以从下到上制作列表,然后从列表末尾开始从上到下构建树。