如何在树结构中获取ansestor的属性?

时间:2013-10-13 01:48:19

标签: c++ composite

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

1 个答案:

答案 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) {}
    ...
};