树——一种数据结构

part-whole

通过树形结构的构造,进行组合设计模式(Composite)的实现:

// Node作为基类
// 本身不持有数据,用于维护共同的节点结构
class Node
{
public:
    virtual ~Node() {}

protected:
    Node(size_t id, boost::shared_ptr<Node> p):_parent(p), _id(id)
        {}
                // 通过构造函数传递进来的父类指针建立与其他节点的关系

    boost::shared_ptr<Node> _parent;
    size_t _id;
    size_t _level;
};
class Record;
class LeafNode :public Node
{
public:
    LeafNode(const boost::shared_ptr<Record>& r, size_t id = 0, 
            const boost::shared_ptr<Node>& p = boost::shared_ptr<Node>());
private:
    boost::shared_ptr<Record> _data;
};
class InternalNode :public Node
{
private:
    std::vector<boost::shared_ptr<Node>> _data;
};

两颗子树的 joinWith(merge)

class HClustering { public: HClustering(const shared_ptr<Node>& root):_root(root) {} boost::shared_ptr<Node> joinWith(HClustering& hc, double joinVal) { // 需要new 出来一个新的节点 // 然后交给智能指针管理 Node* p = new Node(joinVal); boost::shared_ptr<Node> node(p); _root->set_parent(node); hc.root()->set_parent(node); p->add(_root); p->add(hc.root()); return node; } private: boost::shared_ptr<Node> _root; };

你可能感兴趣的:(树——一种数据结构)