Нулевой и составной шаблон не играют хорошо вместе
В этом составном дереве я сохраняю ссылку на родительский узел для гибкого обхода дерева. Я не хочу проверять родительский объект на наличие нулевой ссылки все время, но если я создаю класс 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();
}