From programming pearls, it is known that array[1...n] has heap property if for all 2<=i<=n x[i/2]<=x[i].
Here is my code:
import java.math.*;
public class Heap
{
public static void main(String[]args)
{
int x[]=new int[]{12,20,15,29,23,17,22,35,40,26,51,19};
for (int i=2;i<x.length;i++)
{
if (x[Math.round(i/2)]<=x[i])
{
System.out.println("heap");
}
else
{
System.out.println("not heap");
}
}
}
}
Here I used Math.round because 4/2 and 5/2 is same and =2. When I compile this code it shows me at last line that it is not heap. Maybe because the index starts from 1 and we don’t pay attention to index 0, yes?
You are on the right track. However, there are a few key notes:
Each time around the loop, the code will print “heap” or “not heap”, as Moron has pointed out.
Try starting with a
booleanvariable initialized totrueSet it to
falseandbreakif the heap condition is not met in an iterationThen check the value of the variable at the end
Or, you could just
return false(or print “not met” andreturn) if the condition is not met in an iteration andreturn true(or print “met”) after the loopStart at 0 with your loop (btw, java arrays are 0-based, not 1-based); the heap condition applies to all nodes.
Get rid of that
Math.roundthing. It does absolutely nothing and clutters up your codeYou might extract this into another method