diff --git a/src/main/java/ch/hepia/structure/BinaryHeap.java b/src/main/java/ch/hepia/structure/BinaryHeap.java index 1262837c876856fe1fe97737d71edd4ed16c2575..fe7cfc1f65def3404ab1d2f75f72702e3156b8f4 100644 --- a/src/main/java/ch/hepia/structure/BinaryHeap.java +++ b/src/main/java/ch/hepia/structure/BinaryHeap.java @@ -8,14 +8,80 @@ import java.util.function.Function; final public class BinaryHeap { final private List<Integer> lstBinaryHeap; - private BinaryHeap() + private int taille; + public BinaryHeap() { - lstBinaryHeap=new ArrayList<Integer>(); + this.lstBinaryHeap=new ArrayList<Integer>(); + this.taille=0; } public void push(int value) { + this.taille++; + this.lstBinaryHeap.add(value); + this.sort(); + } + + private void sort() + { + int index=this.size()-1; + while(index!=0) + { + if(this.getParentNodeValue(index)<this.get(index)) + { + //les place doivent etre changer + this.switchPlace(this.getParentNodeIndex(index),index); + //test la valeur d'a cote + } + else + { + //test si la branche existe + if(this.getSameLevelIndex(index)<this.size()) + { + //si elle existe + index=this.getSameLevelIndex(index);//passe a l'index d'a coter + if(this.getParentNodeValue(index)<this.get(index)) + { + //les place doivent etre changer + this.switchPlace(this.getParentNodeIndex(index),index); + } + } + } + index=this.getParentNodeIndex(index); + } + } + + private void switchPlace(int index1,int index2) + { + int tmp; + tmp=this.lstBinaryHeap.get(index1); + this.set(index1,this.get(index2)); + this.set(index2,tmp); + } + public void print() + { + for(int val:lstBinaryHeap) + { + System.out.println(val); + } + } + + public int size() + { + return this.taille; + } + + private int getSameLevelIndex(int index) + { + if(index%2==0) + { + return index-1; + } + else + { + return index+1; + } } private int getRightNodeIndex(int index) diff --git a/src/test/java/ch/hepia/structure/AppTest.java b/src/test/java/ch/hepia/structure/AppTest.java index 668c64e7f5d32e02eb6bf210089383c2c54afc81..b24c38faf4b33baae4c55668961cfd1df6cc30f1 100644 --- a/src/test/java/ch/hepia/structure/AppTest.java +++ b/src/test/java/ch/hepia/structure/AppTest.java @@ -11,7 +11,20 @@ import static org.junit.jupiter.api.Assertions.assertFalse; class BinaryHeapTest { @Test - void BinaryHeapMainOperations() { - assertEquals(1,1); + void BinaryHeapPushTest() + { + BinaryHeap bHeap= new BinaryHeap(); + bHeap.push(100); + bHeap.push(19); + bHeap.push(36); + bHeap.push(17); + bHeap.push(3); + bHeap.push(25); + bHeap.push(1); + bHeap.push(2); + bHeap.push(7); + bHeap.push(40); + bHeap.print(); + //assertEquals(); } }