红黑树 - 初始化

问题描述

如何在向树添加节点之前正确初始化空的红黑树?

我的结构:

enum class Colour 
{
    RED,BLACK
};

struct Node
{
    Node *parent = nullptr;
    Node *leftChild = nullptr;
    Node *rightChild = nullptr;
    Colour colour = Colour::RED;
    T element = T();
};

Node *root = nullptr;
Node *nilNode = nullptr;

我的构造函数

RedBlackTree() 
{
    nilNode = new Node();
    nilNode->colour = Colour::BLACK;
    root = nilNode;
}

当创建一棵空树时,nilnode 应该是黑色的,所有红色节点都应该有黑色的子节点——但是,向树添加节点是行不通的。我已经尝试在我的 addnode 函数中使用 root = new Node() 但正如预期的那样,程序崩溃了,我知道 root 已经指向我的构造函数中的 nilNode 。我在 delete root 之前也用 root = new Node() 进行了测试,它不再崩溃,但不会打印出树的节点。我在这里遗漏了什么重要的东西吗?

我的添加节点函数不适用于当前构造函数

template <typename T>
bool RedBlackTree<T>::addNewNode(const T &val)
{
    //delete root; 
    //root = new Node(); <-- if I don't use delete root before this line,the program crashes.
    //root->element = val; <-- I only use tree.addNewNode(5) in my main for test purpose.
    return true;
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)