Skip to content

Instantly share code, notes, and snippets.

@skdangi
Created November 8, 2013 20:59
Show Gist options
  • Select an option

  • Save skdangi/7377609 to your computer and use it in GitHub Desktop.

Select an option

Save skdangi/7377609 to your computer and use it in GitHub Desktop.
public class CheckBalanced {
private static class Node<T> {
public Node(T value) {
this.value = value;
}
Node successor;
Node left;
Node right;
T value;
}
private static class ValueHolder<T> {
T value;
}
public static void main(String[] args) {
Node<Integer> node20 = new Node<Integer>(20);
Node<Integer> node30 = new Node<Integer>(30);
Node<Integer> node40 = new Node<Integer>(40);
Node<Integer> node50 = new Node<Integer>(50);
Node<Integer> node60 = new Node<Integer>(60);
Node<Integer> node90 = new Node<Integer>(90);
Node<Integer> node100 = new Node<Integer>(100);
node20.left = node30;
node20.right = node40;
node30.left = node50;
node30.right = node60;
node60.left = node90;
node60.right = node100;
ValueHolder<Boolean> isBalanceHolder = new ValueHolder<Boolean>();
isBalanceHolder.value = true;
height(node20, isBalanceHolder);
System.out.println(isBalanceHolder.value);
ValueHolder<Integer> heightHolder = new ValueHolder<Integer>();
System.out.println(isBalanced(node20, heightHolder));
}
public static Boolean isBalanced(Node node, ValueHolder<Integer> heightHolder) {
if (node == null) {
heightHolder.value=0;
return true;
}
boolean lb =isBalanced(node.left, heightHolder);
int lh = heightHolder.value+1;
boolean rb =isBalanced(node.right, heightHolder);
int rh = heightHolder.value+1;
heightHolder.value= lh>rh?lh:rh;
System.out.println(node.value+" "+lh+" "+ rh+" "+heightHolder.value);
if(Math.abs(lh-rh)>1){
return false;
}else{
return true;
}
}
public static int height(Node node, ValueHolder<Boolean> valueHolder) {
if (node == null) {
return 0;
}
int lh = height(node.left, valueHolder) + 1;
int rh = height(node.right, valueHolder) + 1;
if (valueHolder.value&&Math.abs(lh - rh) > 1) {
valueHolder.value = Boolean.FALSE;
}
int height = lh > rh ? lh : rh;
System.out.println(node.value+" "+height+" "+ valueHolder.value);
return height;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment