Нулевой и составной шаблон не играют хорошо вместе

В этом составном дереве я сохраняю ссылку на родительский узел для гибкого обхода дерева. Я не хочу проверять родительский объект на наличие нулевой ссылки все время, но если я создаю класс NullNode и инициализирую для этого родительский узел каждого узла, я получаю переполнение стека, поскольку NullNode имеет NullNode, имеет NullNode имеет.... до бесконечности Я попытался установить родителя NullNode в нуль, но затем мне все еще нужно сделать проверку нулевой ссылки для родителя, который, кажется, побеждает цель. кто-нибудь сталкивался с этим? Что, если что-нибудь можно сделать?

Спасибо!

2 ответа

Решение

если я создаю класс NullNode и инициализирую каждый родительский узел для этого, я получаю переполнение стека, так как NullNode имеет NullNode имеет NullNode имеет.... до бесконечности Я пытался установить родительский элемент NullNode в нулевое значение, но тогда я все еще сделать нулевую проверку ссылки для родителя, который, кажется, побеждает цель. кто-нибудь сталкивался с этим?

Ваш NullNode не нужно на самом деле содержать другой NullNode как родитель. Просто реализовать getParent() в NullNode (или как вы это называете), чтобы вернуться this или же self или что-то еще означает, что на вашем языке.

Тем не менее, это все еще может быть плохой идеей, так как вы должны остановить обход в какой-то момент. Вышесказанное поможет вам преодолеть рекурсию конструктора, но у дерева нет корня, так как он имеет нулевые узлы все время вверх или все выше и так далее.

Об этом будет гораздо легче говорить, если вы действительно покажете код, даже если он не работает, и немного опишите свои планы использования.

Пример счетчика (экстремальный псевдокод):

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();
 }
Другие вопросы по тегам