在这个复合树中,我保留了对父节点的引用以进行灵活的树遍历。我不想一直检查父引用的空引用但是如果我创建一个NullNode类并初始化每个节点的父代,我得到一个堆栈溢出,因为NullNode有一个NullNode有一个NullNode有一个.. ..无限的 我已经尝试将NullNode的父级设置为null但是我仍然必须对父级进行空引用检查,这似乎是为了破坏目的。 有人碰到这个吗?什么,如果有什么可以做的?
谢谢!
答案 0 :(得分:1)
计数器示例(极端伪代码):
class NullNode(): Component{
public NullNode(){
}
public something SearchUp(){
return null;
}
}
class Node: Component{
public Node(t){
this.parent = NullNode();
}
public void SetParent(Component parent){
this.parent = parent;
}
public something SearchUp(){
return self.parent.SearchUp();
}
}
abstract class Component{
Component parent
public Component(){
}
public something SearchUp();
}
答案 1 :(得分:1)
如果我创建一个NullNode类并初始化每个节点的父节点,我得到一个堆栈溢出,因为NullNode有一个NullNode有一个NullNode有一个.... ad无限我尝试将NullNode的父节点设置为null但是然后我仍然需要对父母进行空引用检查,这似乎打败了目的。有人碰到这个吗?
您的NullNode
不需要将另一个NullNode
实际包含为父级。只需在getParent()
(或您正在调用的任何内容)中实施NullNode
即可返回this
或self
或以您的语言提供的任何方式。
然而,这可能仍然是一个坏主意,因为你做必须在某个时候停止遍历。上面的命令会让你通过构造函数的递归,但是树没有根,因为它的NullNodes一直都是NullNodes或者乌龟一直都是这样的。
如果您实际显示代码,即使它不起作用,也会更容易讨论,并描述您的使用计划。