在这个复合树中,我保留对父节点的引用以进行灵活的树遍历。我不想一直检查父级是否有空引用,但是如果我创建一个 NullNode 类并将每个节点的父级初始化为此我会得到堆栈溢出,因为 NullNode 有一个 NullNode 有一个 NullNode 有一个.. .. ad infinitum 我已经尝试将 NullNode 的父级设置为 null,但是我仍然必须对父级进行 null 引用检查,这似乎违背了目的。有人遇到这个吗?什么,如果有什么可以做的?
谢谢!
在这个复合树中,我保留对父节点的引用以进行灵活的树遍历。我不想一直检查父级是否有空引用,但是如果我创建一个 NullNode 类并将每个节点的父级初始化为此我会得到堆栈溢出,因为 NullNode 有一个 NullNode 有一个 NullNode 有一个.. .. ad infinitum 我已经尝试将 NullNode 的父级设置为 null,但是我仍然必须对父级进行 null 引用检查,这似乎违背了目的。有人遇到这个吗?什么,如果有什么可以做的?
谢谢!
如果我创建一个 NullNode 类并将每个节点的父级初始化为此我会得到一个堆栈溢出,因为 NullNode 有一个 NullNode 有一个 NullNode 有一个.... 无限期我尝试将 NullNode 的父级设置为 null 但我仍然有对似乎违背目的的父母进行空参考检查。有人遇到这个吗?
您NullNode
实际上不需要包含另一个NullNode
作为父级。只需实现getParent()
in NullNode
(或您所称的任何内容)以返回this
或self
以您的语言表示。
但是,这可能仍然是一个坏主意,因为您必须在某个时候停止遍历。上面的代码让你通过了构造函数递归,但是树没有根,因为它一直是 NullNodes 或者是海龟一直向下或类似的东西。
如果你真的展示了代码,即使它没有工作,这一切都会更容易谈论,并稍微描述一下你的使用计划。
反例(极端伪代码):
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();
}