
public class Main {


  public static boolean isHeap(BinTree tree) {
  
    if ( tree.empty() ) {
    
      return true;
    
    } else {
    
      boolean ok = true;
      
      if ( !tree.left().empty() ) {
        ok = ( tree.left().root() <= tree.root() );
      }
      if ( ok && !tree.right().empty() ) {
        ok = ( tree.right().root() <= tree.root() );
      }
      return ( ok && isHeap(tree.left()) && isHeap(tree.right()) );
    }
  }
  
  
  public static void main(String args[]) {
  
    BinTree tree
      = new BinTree( 25,
              new BinTree( 20,
                    new BinTree( 7 ),
                    new BinTree( 18,
                          new BinTree(4),
                          new BinTree(8)
                          )
                    ),
              new BinTree( 15,
                    new BinTree( 12,
                          new BinTree(2),
                          new BinTree(11)
                          ),
                    new BinTree( 10,
                          new BinTree(),
                          new BinTree(3)
                          )
                    )
              );
    System.out.println( "  isHeap = " + isHeap(tree) );
    
    tree
      = new BinTree( 25,
              new BinTree( 20,
                    new BinTree( 7 ),
                    new BinTree( 18,
                          new BinTree(4),
                          new BinTree(8)
                          )
                    ),
              new BinTree( 15,
                    new BinTree( 16,
                          new BinTree(2),
                          new BinTree(11)
                          ),
                    new BinTree( 10,
                          new BinTree(),
                          new BinTree(3)
                          )
                    )
              );
    System.out.println( "  isHeap = " + isHeap(tree) );
  }

}
