No solution file found.
#include <algorithm>
#include <iostream>
#include <iterator>
#include <limits>
#include <sstream>
#include <string>
#include <vector>
template<typename T>
struct Node {
T val;
Node<T>* left;
Node<T>* right;
explicit Node(T val, Node<T>* left = nullptr, Node<T>* right = nullptr)
: val{val}, left{left}, right{right} {}
~Node() {
delete left;
delete right;
}
};
int lca_on_bst(Node<int>* bst, int p, int q) {
// WRITE YOUR BRILLIANT CODE HERE
return 0;
}
// this function builds a tree from input
// learn more about how trees are encoded in https://algo.monster/problems/serializing_tree
template<typename T, typename Iter, typename F>
Node<T>* build_tree(Iter& it, F f) {
std::string val = *it;
++it;
if (val == "x") return nullptr;
Node<T>* left = build_tree<T>(it, f);
Node<T>* right = build_tree<T>(it, f);
return new Node<T>{f(val), left, right};
}
template<typename T>
std::vector<T> get_words() {
std::string line;
std::getline(std::cin, line);
std::istringstream ss{line};
ss >> std::boolalpha;
std::vector<T> v;
std::copy(std::istream_iterator<T>{ss}, std::istream_iterator<T>{}, std::back_inserter(v));
return v;
}
void ignore_line() {
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
int main() {
std::vector<std::string> bst_vec = get_words<std::string>();
auto bst_it = bst_vec.begin();
Node<int>* bst = build_tree<int>(bst_it, [](auto s) { return std::stoi(s); });
int p;
std::cin >> p;
ignore_line();
int q;
std::cin >> q;
ignore_line();
int res = lca_on_bst(bst, p, q);
std::cout << res << '\n';
}
No solution file found.