我目前正在尝试使用模板在C ++中实现RB树。我有两个类 - 一个是rB.h(其中有所需的所有函数,如插入和删除以提供树的功能),另一个是node.h(它包含节点的基本属性和相应的getter / setter函数提供封装)。我想声明一个名为'sentinel'的节点。前哨节点的功能是使得具有空指针(即,左/右子节点不存在)的每个节点指向标记。此外,哨兵的颜色应为黑色。我不确定应该如何声明这个,因为我使用的是模板,而且对C ++和模板都很新。下面是我的node.h的一些代码(基本上是私有变量和构造函数)。我没有包括整个类,所以我不会有很多行代码。有人可以提供任何指导吗?
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
};
答案 0 :(得分:0)
对于sentinel节点,您可能使用类模板的static
成员函数,该函数提供对static
变量指针的访问:
template <typename T, typename Key>
Node<T, Key> const* Node<T, Key>::sentinel() {
static Node<T,Key> rc(...);
return &rc;
}