我正在学习C ++并且这样做,我实现了一些常见的数据结构。
我开始实现二进制搜索树,它很好,所以现在我实现了一个红黑树,因为我想通过将BST节点扩展到RBT节点(只需添加一个bool颜色) ),这是我的问题来了。
这是我的节点定义:
// NODE (key, value) //
class Node {
public:
int key;
int value; // value is integer for simplicity
Node *parent;
Node *left;
Node *right;
Node();
Node(int key, int value);
Node *grandparent();
Node *uncle();
};
然后我有了我的RedBlackNode:
// RED BLACK NODE (node with color) //
class RedBlackNode : public Node {
public:
int key;
int value;
RedBlackNode *parent;
RedBlackNode *left;
RedBlackNode *right;
bool color;
RedBlackNode();
RedBlackNode(int key, int value);
RedBlackNode *grandparent();
RedBlackNode *uncle();
};
除了颜色之外,它看起来完全相同,因为grandparent()和uncle()返回RedBlackNode而不是Node。
我的BinarySearchTree方法插入(键,值)和搜索(键)也是如此,我想知道是否必须重写所有方法只是因为这个。
我一直在考虑使用模板,但这对我没有意义,因为BST只会由节点组成,而RBT将由彩色节点组成。
感谢您的提前时间。