Что за last_key? Почему дерево считается неправильным, если самая левая вершина равна numeric_limits<int>::min()
Эта задача, в отличии от предыдущих двух ваших вопросов - простая. Тут не надо писать балансированное дерево поиска, а надо тупо проверить, что заданное дерево хорошее.
Отличие от прошлой задачи, упомянутой в вопросе - только в том, что теперь ограничения в каждом поддереве не L < key < R
, а L <= key < R
. Т.е. отличие от кода в конце вопроса, по идее, должно состоять только в одном знаке <=
вместо <
Есть, правда, дополнительная проблема, что числа могут быть очень большие и, например, надо было бы в самом начале передавать numeric_limits<int>::max()+1
в качестве правой границы. Но тут можно решить эту проблему просто заменив тип параметров max_key, min_key на long long. Или изменить их смысл на "ключи в этом поддереве могут быть с L по R включительно". Тогда при переходе к левому сыну надо бы передавать tree[i].key-1
в качестве max_key. Но тогда надо аккуратно и не переполниться при numeric_limits<int>::min()
. Но тут тогда нужна дополнительная проверка - любая вершина со значением numeric_limits<int>::min()
не должна иметь левых детей.