public class IsBalanceTree {
static class Node{
int value;
Node left;
Node right;
public Node(int data) {
value = data;
}
}
static class ReturnData{
boolean isB;
int level;
public ReturnData(boolean isB, int level) {
this.isB = isB;
this.level = level;
}
}
public static ReturnData isBalance(Node head) {
if(head == null) {
return new ReturnData(true,0);
}
ReturnData left = isBalance(head.left);
if(!left.isB) {
return new ReturnData(false,0);
}
ReturnData right = isBalance(head.right);
if(!right.isB) {
return new ReturnData(false,0);
}
if(Math.abs(left.level - right.level) > 1) {
return new ReturnData(false,0);
}
return new ReturnData(true, Math.max(left.level, right.level) + 1);
}
public static void printIsBalance(ReturnData rd) {
if(rd.isB) {
System.out.println("true," + "level:" + rd.level);
}else {
System.out.println("false");
}
}
//for test
public static void main(String[] args) {
Node head = null;
printIsBalance(isBalance(head));;
head = new Node(1);
printIsBalance(isBalance(head));;
head = new Node(1);
head.left = new Node(2);
head.right = new Node(3);
head.left.left = new Node(4);
head.left.left.left = new Node(5);
printIsBalance(isBalance(head));;
head = new Node(1);
head.left = new Node(2);
head.right = new Node(3);
head.left.left = new Node(4);
head.left.right = new Node(6);
printIsBalance(isBalance(head));;
head = new Node(100);
head.left = new Node(21);
head.left.left = new Node(37);
head.right = new Node(-42);
head.right.left = new Node(0);
head.right.right = new Node(666);
head.right.right.right = new Node(343432);
head.right.right.right.right = new Node(4343434);
printIsBalance(isBalance(head));;
}
}