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();
   }
 }