Я видел вопрос в книге (Cracking the Coding Interview). Предлагаемый код:Проверка того, сбалансировано ли двоичное дерево
public boolean isBalanced(Node root) {
if(root == null)
return true;
int leftHeight = getHeight(root.left);
System.out.println("left height: " + leftHeight);
int rightHeight = getHeight(root.right);
System.out.println("right height: " + rightHeight);
int diff = Math.abs(leftHeight - rightHeight);
// check if difference in height is more than 1
if (diff > 1)
return false;
// check if left and right subtrees are balanced
else
return isBalanced(root.left) && isBalanced(root.right);
Часть я не понимаю, почему мы обязательно вернуться isBalanced (root.left) & & isBalanced (root.right). Разве не достаточно просто проверить высоту и вернуть false, если высота больше 1, и верно в противном случае?
Наличие равных высот в левом и правом корнях не гарантирует сбалансированное дерево. Например, у меня есть корень с левой высотой 6 и правой высотой 6, но левая ветвь - это одна ветвь, у которой нет правильных ветвей. – Compass
Как вы можете иметь дерево с более чем тремя узлами высоты не может превышать 1? – NickL