Мне довольно удобно иметь дело с инвертированием двоичного дерева, с использованием необработанных указателей, но я пытаюсь сделать это с unique_ptrs.
У меня есть класс TreeNode, определенный следующим образом:
template<typename T>
struct TreeNode {
T val;
unique_ptr<TreeNode<T>> left, right;
};
В настоящее время у меня есть эта функция для инвертирования двоичного дерева:
TreeNode<int>* InvertTree(const unique_ptr<TreeNode<int>>& root) {
if (root == nullptr) {
return nullptr;
}
auto left = InvertTree(root->left);
auto right = InvertTree(root->right);
root->left = make_unique<TreeNode<int>>(right);
root->right = make_unique<TreeNode<int>>(left);
return root.get();
}
Это как это должно быть сделано? Какой лучший способ пойти по этому поводу?