#include <memory>
#include <iostream>
#include <string>
struct BstNode
{
int value;
std::unique_ptr<BstNode>left;
std::unique_ptr<BstNode>right;
BstNode(int value);
};
void addToTree(std::unique_ptr<BstNode>& bst, int value)
{
if (bst) {
if (value < bst->value) {
addToTree(bst->left, value);
}
else if (value > bst->value) {
addToTree(bst->right, value);
}
}
else{
bst = std::make_unique<BstNode>(value);
}
}
std::unique_ptr<BstNode>& operator << (std::unique_ptr<BstNode>& bst, int value)
{
addToTree(bst, value);
return bst;
}
BstNode::BstNode(int value) : value(value), left(nullptr), right(nullptr) {};
std::unique_ptr<BstNode>createBstNode(int value)
{
std::unique_ptr<BstNode> node = std::make_unique<BstNode>(8);
return move(node);
}
std::ostream & operator<<(std::ostream & stream, BstNode * bst)
{
if (bst) {
stream << bst->left.get() << bst->value << " " << bst->right.get();
}
return stream;
}
int main()
{
std::unique_ptr<BstNode> bst = nullptr;
addToTree(bst, 5);
std::cout << bst.get() << std::endl;
addToTree(bst, 2);
std::cout << bst.get() << std::endl;
addToTree(bst, 8);
std::cout << bst.get() << std::endl;
return 0;
}
to jest cały kod może coś innego w nim powoduję zmianę Twoich i moich przewidywań...