0

在这个复合树中,我保留对父节点的引用以进行灵活的树遍历。我不想一直检查父级是否有空引用,但是如果我创建一个 NullNode 类并将每个节点的父级初始化为此我会得到堆栈溢出,因为 NullNode 有一个 NullNode 有一个 NullNode 有一个.. .. ad infinitum 我已经尝试将 NullNode 的父级设置为 null,但是我仍然必须对父级进行 null 引用检查,这似乎违背了目的。有人遇到这个吗?什么,如果有什么可以做的?

谢谢!

4

2 回答 2

1

如果我创建一个 NullNode 类并将每个节点的父级初始化为此我会得到一个堆栈溢出,因为 NullNode 有一个 NullNode 有一个 NullNode 有一个.... 无限期我尝试将 NullNode 的父级设置为 null 但我仍然有对似乎违背目的的父母进行空参考检查。有人遇到这个吗?

NullNode实际上不需要包含另一个NullNode作为父级。只需实现getParent()in NullNode(或您所称的任何内容)以返回thisself以您的语言表示。

但是,这可能仍然是一个坏主意,因为您必须在某个时候停止遍历。上面的代码让你通过了构造函数递归,但是树没有根,因为它一直是 NullNodes 或者是海龟一直向下或类似的东西。

如果你真的展示了代码,即使它没有工作,这一切都会更容易谈论,并稍微描述一下你的使用计划。

于 2011-06-21T22:18:08.323 回答
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();
 }
于 2011-06-21T18:36:26.613 回答