Цель: найти, является ли дерево сбалансированным двоичным деревом.
Я реализовал программу, которая работает, но хотел сделать ее более эффективной, предотвращая ненужную рекурсию.Для этого я использую статическую переменную, которая устанавливается, когда даже одно условие оценивается как ложное, так что каждый другой рекурсивный вызов возвращается, прежде чем делать какой-либо из своих собственных рекурсивных вызовов.
static int shouldIExit=0;
public boolean isBalanced(TreeNode root) {
if(root==null){
return true;
}
if(shouldIExit==1 || Math.abs(height(root.left)-height(root.right))>1){
height(root.right))>1: "+ (Math.abs(height(root.left)-height(root.right))>1) ) ;
shouldIExit=1;
return false;
}
else{
return (isBalanced(root.left) && isBalanced(root.right) );
}
}
Проблема в том, что статическая переменная каким-то образом устанавливается, даже если никакие условия не приводят к этому.то есть, должен лиIEIExit = 1, даже если соответствующее условие if не оценивается как true.
Неужели я не понимаю, как работают статические переменные?