2013-10-13 3 views
1

Я использую composite pattern для реализации древовидной структуры. Он имеет 3 класса: узел (базовый класс), лист (без дочернего класса) и ветвь (с классом children). И у меня есть некоторые общие данные, помещенные в узел дерева, например корень. Примером общих данных является выбор единицы измерения или километр. Общие данные должны быть доступны для всех узлов. Как его реализовать? Помещение указателя на общие данные ко всем узлам не кажется эффективным с точки зрения памяти.Как получить атрибут ansestor в древовидной структуре?

ответ

1

Один из способов сделать это - добавить отдельный класс для дерева, поместить там указатель root и добавить туда все общие предметы. Затем добавьте tree указатель на node базовый класс, а также добавить аргумент конструктора, чтобы указать все узлы дерева обратно в их tree объекта:

class node; 
class tree { 
    node *root; 
    int multiplier; // e.g. 1000 for meters, 1 for kilometers 
} 
class node { 
protected: 
    tree *owner; 
    node *parent; // parent is NULL for the root 
    node(tree *_owner, node *_parent) : owner(_owner), parent(_parent) {} 
}; 
class branch : public node { 
    list<node> children; 
public: 
    branch(tree *_owner, node *_parent) : node(_owner, _parent) {} 
    ... 
}; 
Смежные вопросы