// El árbol de los apuntes: sus tres recorridos, su altura, y qué pasa al borrar la raíz.
#include <iostream>
#include <string>
#include <vector>

#include "bst_set.h"

namespace {

void print_line(const std::string& name, const std::vector<int>& keys) {
    std::cout << name << ":";
    for (int key : keys) {
        std::cout << " " << key;
    }
    std::cout << "\n";
}

}  // namespace

int main() {
    BstSet<int> tree;
    for (int key : {5, 3, 8, 1, 4, 7}) {
        tree.insert(key);
    }
    std::cout << "forma: " << tree.shape() << "\n";
    print_line("en orden", tree.in_order());
    print_line("preorden", tree.pre_order());
    print_line("postorden", tree.post_order());
    std::cout << "altura: " << tree.height() << "\n";

    tree.erase(5);
    std::cout << "sin el 5: " << tree.shape() << "\n";
    print_line("en orden", tree.in_order());
    tree.check_invariants();
    return 0;
}
