c++ - 使用模板构建哨兵节点 - C++

标签 c++ tree

我目前正在尝试使用模板在 C++ 中实现 RB 树。我有 2 个类 - 一个是 rB.h(其中有所有需要的函数,例如插入和删除以提供树的功能),另一个是 node.h(由节点的基本属性和相应的 getter/setter 函数以提供封装)。我想声明一个名为“sentinel”的节点。 sentinel节点的作用是让每个有NULL指针的节点(即左/右 child 不存在)指向sentinel。此外,哨兵的颜色应该是黑色。我不确定应该如何声明它,因为我使用的是模板并且对 C++ 和模板都是全新的。下面是我的 node.h 的一些代码(主要是私有(private)变量和构造函数)。我没有包括整个类,所以我不会有很多代码行。谁能提供任何指导方针?

template<class T, class key>

class Node {
private:
    Node<T,key>*left;
    Node<T,key>*right;
    Node<T,key>*parent;
    key k;
    T value;
    string colour;

public:

    Node<T,key>* root;


    Node(T value,key k,Node<T,key>*l, Node<T,key>*r, Node<T,key>*p, string c){
        setLeft(l);
        setRight(r);
        setParent(p);
        setKey(k);
        setValue(value);
        setColour(c);
    }

   //all getters and setters


};

最佳答案

对于哨兵节点,您可能会使用类模板的 static 成员函数,它提供对指向 static 变量的指针的访问:

template <typename T, typename Key>
Node<T, Key> const* Node<T, Key>::sentinel() {
    static Node<T,Key> rc(...);
    return &rc;
}

关于c++ - 使用模板构建哨兵节点 - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20848345/

相关文章:

algorithm - 查找给定(不一定是二叉)树的最大和二 fork 树

delphi - Delphi中的二叉树实现

c++ - 清理此代码 [文件输入]

c++ - 使用 Win32/C++ API 更改 Windows 7 墙纸(操作未实现异常)

c++ - 几何着色器

algorithm - 如何测试一棵树是否在线性时间内具有完美匹配?

python - 循环树状结构

c++ - 遍历 boost 属性树时变量变空

c++ - 将 irrlicht 类注册到 angelscript 中会得到 <未解析的重载函数类型>

c++ - 过滤 std::string 的 std::vector