我使用composite pattern来实现树结构。它有3个类:node(基类),leaf(没有子类)和branch(带子类)。我将一些常见数据放在树节点中,比如root。常见数据的一个例子是仪表或公里的单位选择。应该访问所有节点的公共数据。怎么实现呢?将公共数据的指针放到所有节点上似乎没有内存效率。
答案 0 :(得分: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) {}
...
};