Open irekminn opened 2 years ago
В связи с разногласиями по поводу необходимости изменения логики проверки приведу один, на мой взгляд, "убийственный" пример-аргумент в пользу необходимости поменять логику:
Радуемся жизни и думаем что у нас сбалансированное дерево. Ведь метод, который проверяет дерево на баланс ( needBalancing(IntTreeNode root)) не видит ничего странного. Конечно, куда ему..У нас же maxDepth и minDepth одинаковые: по 1000_000 В реальности же наше дерево выродилось в простой список из 1000_000 элементов, каждый из которых больше значения ноды root (10).
Немного картинок. Для простоты понимания:
А теперь как должно быть:
Всем привет. Необходимо поправить 2 теста:
Оба теста, после добавления node к root, требуют изменение полей:
Truth.assertWithMessage("checking addNode has correct newMaxDepth").that(node.maxDepth()).isEqualTo(2); Truth.assertWithMessage("checking addNode has correct newMinDepth").that(node.minDepth()).isEqualTo(2);
Эти поля у node должны остаться по умолчанию, а вот у root maxDepth должно меняться. Предлагаю поправить так: root:
Truth.assertWithMessage("checking addNode has correct newMaxDepth").that(root.maxDepth()).isEqualTo(2); Truth.assertWithMessage("checking addNode has correct newMinDepth").that(root.minDepth()).isEqualTo(1);
node:
Truth.assertWithMessage("checking addNode has correct newMaxDepth").that(node.maxDepth()).isEqualTo(1); Truth.assertWithMessage("checking addNode has correct newMinDepth").that(node.minDepth()).isEqualTo(1);
Т.е. при добавлении ноды меняется поле maxDepth или minDepth, в зависимости в какую ветку добавляем, только у той ноды к которой добавляем, в данном случае у ноды root. Проверка на изменение полей реализована в каждом тесте в двух местах. В обоих случаях проверка содержит ошибку.