我为大型项目制作的二进制搜索树出现了问题。
有一个节点:
template <class Key, class Value>
struct Node
{
public:
Key key;
vector<Value> value;
Node* leftNode;
Node* rightNode;
Node(Key k, Value v)
{
key = k;
value.push_back(v);
}
};
这些节点正在存储到BST中。
BST的插入功能中发生错误:
template <class Key, class Value>
void BinarySearchTree<Key, Value>::insert(const Key &key, const Value &value)
{
insert(root, key, value);
}
template <class Key, class Value>
void BinarySearchTree<Key, Value>::insert(Node<Key, Value> *&node, const Key &key, const Value &value)
{
if (node == nullptr)
node = new Node<Key, Value>(key, value);
// Error occurs here.
else if (node->key == key)
node->value.push_back(value);
else if (key < node->key)
insert(node->leftNode, key, value);
else
insert(node->rightNode, key, value);
}
第一个节点没有问题地插入树中,但是第二个Insertion调用引发错误。
任何帮助我步入正轨的方法将不胜感激。
答案 0 :(得分:3)
您的插入代码似乎假设Node::leftNode
和Node::rightNode
初始化为nullptr
,但是您的构造方法不能保证这样做。试试这个
Node(Key k, Value v)
{
key = k;
value.push_back(v);
leftNode = rightNode = nullptr;
}
答案 1 :(得分:1)
您的代码未初始化leftNode
或rightNode
。如果没有原始指针值,则不对它们进行值初始化。 std::unique_ptr
的默认构造等于nullptr
似乎还没有对Node
s进行任何清理
template <class Key, class Value>
struct Node
{
public:
Key key;
std::vector<Value> value;
std::unique_ptr<Node> leftNode;
std::unique_ptr<Node> rightNode;
Node(Key k, Value v)
: key(k), value({v})
{ }
};