Konstruktor kopiujący drzewo bst

0

Witam, postanowiłem napisać sobie drzewo bst i umieścić w implementacji konstruktor kopiujący:

class bst_tree
{
public:
	bst_tree();
	~bst_tree();
	bst_tree(bst_tree &tree);
	bool isEmpty();
	void insert(int value);
	void dispay();
private:
	struct node
	{
		int value;
		std::unique_ptr<node> left;
		std::unique_ptr<node>right;
		node(int value);
		node(std::unique_ptr<node> & node);
		void print();
	};
	std::unique_ptr<node> root;
};

bst_tree::node::node(std::unique_ptr<node> & node){
	value = node->value;
	left = std::move(node->left);
	right = std::move(node->right);
}

bst_tree::bst_tree(bst_tree & tree)
{
         //tu jest problem
	std::unique_ptr<node> p = std::make_unique<node>(tree);
	root = std::move(p);
}

ale po pomyśleniu "pójdzie szybko" zderzyłem się z rzeczywistością, i nie wiem jak go napisać, powinien pole po polu "przepisywać" liczę na pomoc i uwagi

0

Wydaje mi się, że najprościej będzie można to zrobić z wykorzystaniem procedury przeglądania preorder.

0

bst_tree::node(std::unique_ptr<node> & node){
...
left = std::move(node->left);
right = std::move(node->right);
}


To `move` byłoby dobre, ale w konstruktorze przenoszącym. Widzę to tak:
```cpp
bst_tree::node::node(const bst_tree::node & node_)
{
    value = node_->value;
    left = make_unique<bst_tree::node>(*node_.left);
    right = make_unique<bst_tree::node>(*node_.right);
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1