From fb2733897fcebb584086b2743ddbe12eb24a9c75 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Mon, 8 Jul 2024 09:47:43 -0700 Subject: feat: invert --- bst.cc | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/bst.cc b/bst.cc index f5f4f07..7101a63 100644 --- a/bst.cc +++ b/bst.cc @@ -200,6 +200,25 @@ public: std::cout << '\n'; } + + static auto invert(std::optional> bst) + -> std::optional> { + if (bst.has_value()) { + if (bst.value()->_left.has_value() || bst.value()->_right.has_value()) { + auto left = invert(bst.value()->_left); + auto right = invert(bst.value()->_right); + + bst.value()->_left = right; + bst.value()->_right = left; + } + + return bst; + } + + return std::nullopt; + } + + auto invert() -> void { invert(std::make_shared>(*this)); } }; auto main() -> int { @@ -227,5 +246,11 @@ auto main() -> int { std::cout << "size: " << bst.size() << '\n'; + std::cout << "inverted: "; + + bst.invert(); + bst.invert(); + bst.print_from_largest_to_smallest(); + return 0; } -- cgit v1.2.3