Несколько дней назад я задал вопрос об этом же проекте, с тех пор наша группа сумела завершить все наши методы, кроме тех, которые используются для определения того, является ли бинарное дерево поиска полный.Рекурсивный тест, если бинарное дерево поиска завершено
Мы используем метод-обертку и вспомогательный метод, чтобы рекурсивно сделать это.
Мы знаем, что нам нужно проверить уровень h-1 дерева (h высота), чтобы убедиться, что он совершенен, тогда нам нужно убедиться, что все листовые узлы на конечном уровне идут слева вправо без пробелов.
Независимо от того, что мы пытаемся, мы не можем понять, как рекурсивно проверять оставшиеся узлы листа, чтобы убедиться, что они являются последовательными слева направо. Мы можем убедиться, что он идеально до уровня (h-1).
Может ли кто-то указать нам в правильном направлении, как рекурсивно проверять узлы листа на последнем уровне, чтобы убедиться, что они выровнены влево?
до сих пор это код?
public boolean isComplete()
{
if (isPerfect(root))
return true;
return isComplete(root);
}
/**
*
* @param node
* @return
*/
private boolean isComplete(Node node)
{
if (height(node) > 1)
{
if (node.left != null && node.right != null && (height(node.left) == height(node.right)))
return isComplete(node.left) && isComplete(node.right);
else
return false;
}
}
PS все тривиальные случаи обрабатываются в методе isPerfect(), так как каждое совершенного дерево также полный
Я не проверял или запустить или скомпилирован это. Поэтому, пожалуйста, будьте осторожны с незначительными ошибками –
, пока ваш код может работать, он отклоняется от требований использования только одного параметра в методе обертки. Спасибо за ввод, хотя! Возможно, я смогу использовать шаги, которые вы дали, чтобы что-то придумать. – sbowde4
@ sbowde4 Я не знаю, заметили ли вы, что в оболочке используется только один параметр –