Я пытаюсь написать метод, который вернет true, если бинарное дерево заполнено (каждый узел имеет 2 дочерних узла или нет) и false в противном случае. Это работает некоторое время, но не все. Любые предложения о том, где я ошибаюсь?Проверьте, заполнено ли бинарное дерево Java?
public static void testNum4()
{
System.out.println("How many nodes do you want in your tree?");
int num=sc.nextInt();
//TreeNode<Integer> root = TreeUtil.createBalancedNumberTree(num); Use to test for a balanced tree
TreeNode<Integer> root = TreeUtil.createIntegerTree(num);
TreeUtil.displayTreeInWindow(root);
System.out.println(isFull(root));
TreeUtil.displayTreeInWindow (root);
}
public static boolean isFull(TreeNode<Integer> root) {
// pre: root of tree, 0 or more nodes
// post: returns true if the input tree is a full tree; false otherwise
if (root!=null) {
if ((root.getLeft() != null && root.getRight() != null) || (root.getRight() == null && root.getLeft() == null))
{
return true;
}
else if (root.getLeft()!=null)
{
isFull(root.getLeft());
}
else if (root.getRight()!=null)
{
isFull(root.getRight());
}
else
return false;
}
return false;
}
Можете ли вы сказать, что ваша проблема четко? – user7
Если дерево завершено, я всегда буду прав. Однако, если он неполный, иногда я становлюсь истинным (что неверно), а иногда и ложным. –
Первое условие 'if' не является правильным. Если узел (корень) имеет 2 дочерних элемента, тогда вы возвращаете значение true, не проверяя их рекурсивно. – user7