From 07d033a611118932aa614f0468c2aed7188420eb Mon Sep 17 00:00:00 2001
From: Mamadu Lamarana BAH <mamadulamarana.bah.etu@univ-lille.fr>
Date: Thu, 22 Feb 2024 08:37:29 +0100
Subject: [PATCH] linearisation

---
 src/BTree.py                | 38 +++++++++++++-----------
 src/Node.py                 | 59 +++++++++++++++++++++++++++++--------
 src/NodeTest.py             |  7 -----
 src/{ => test}/BtreeTest.py |  0
 src/test/NodeTest.py        | 14 +++++++++
 5 files changed, 80 insertions(+), 38 deletions(-)
 delete mode 100644 src/NodeTest.py
 rename src/{ => test}/BtreeTest.py (100%)
 create mode 100644 src/test/NodeTest.py

diff --git a/src/BTree.py b/src/BTree.py
index d3b16b7..5be9bda 100644
--- a/src/BTree.py
+++ b/src/BTree.py
@@ -41,26 +41,28 @@ class Btree() :
             new_root = Node([milieu], [g, d])
             self.root = new_root
         return True
-        
+    
+    def linearisation(self, node):
+        """
+        Exemple(s):
+        >>> a = Btree(2)
+        >>> node = Node([6], [Node([1]), Node([7])])
+        >>> a.linearisation(node)
+        ()
+        """
+        if (node):
+            if (node.isLeaf()):
+                for i in node.keys:
+                    print(i)
+            else:
+                if (len(node.keys) == 1):
+                    self.linearisation(node.childs[0])
+                    print(node.keys[0])
+                    self.linearisation(node.childs[1])
+                else:
+                    for 
             
-        
-        
-                
             
-    
-    #def search() :
-    #def insertion():
-    #def createNode() :
-    #def delete() :
-    #def linear() :
-    #def createTree() :
-    #def height() :
-    #def isArbre() :
-    #def getNbKeys () :
-    #def getSize () :
-    #def changeRoot() :
-    #def isEqual() :
-    
     def __repr__(self) :
         return f"Btree({self.root})"
                 
diff --git a/src/Node.py b/src/Node.py
index 3308034..683bab2 100644
--- a/src/Node.py
+++ b/src/Node.py
@@ -8,12 +8,12 @@ class Node() :
         self.k = k
         
     def isLeaf(self):
-#         """
-#         >>> Node([12, 42]).isLeaf()
-#         True
-#         >>> Node([12, 42], [Node([1]), Node([25]), Node([50])]).isLeaf()
-#         False
-#         """
+        """
+        >>> Node([12, 42]).isLeaf()
+        True
+        >>> Node([12, 42], [Node([1]), Node([25]), Node([50])]).isLeaf()
+        False
+        """
         return (len(self.childs) == 0)
                     
     def getSize(self) :
@@ -42,19 +42,33 @@ class Node() :
     def insert(self, value):
         """
         Exemple(s):
-        >>> Node([5]).insert(20)
+        >>> node = Node([5])
+        >>> node.insert(20)
         (True, None, None, None)
+        >>> node.search(20)
+        (Node([5, 20]), 1)
         >>> Node([5,15]).insert(12)
         (False, 12, Node([5]), Node([15]))
-        >>> a = Node([12, 42], [Node([3]), Node([25]), Node([50])])
-        >>> a.insert(52)
+        >>> node.search(12)
+        
+        >>> node = Node([12, 42], [Node([3]), Node([25]), Node([50])])
+        >>> node.insert(52)
         (True, None, None, None)
-        >>> a.search(52)
+        >>> node.search(52)
         (Node([50, 52]), 1)
-        >>> Node([12, 42], [Node([2, 3]), Node([25]), Node([50])]).insert(1)
+        >>> node = Node([12, 42], [Node([2, 3]), Node([25]), Node([50])])
+        >>> node.insert(1)
         (False, 12, Node([2]), Node([42]))
-        >>> Node([12, 42], [Node([2, 4], [Node([0, 1]), Node([3]), Node([7, 8])]), Node([25]), Node([50])]).insert(6)
+        >>> node.search(1)
+        (Node([1]), 0)
+        >>> node = Node([12, 42], [Node([2, 4], [Node([0, 1]), Node([3]), Node([7, 8])]), Node([25]), Node([50])])
+        >>> node.insert(6)
         (False, 12, Node([4]), Node([42]))
+        
+        >>> node = Node([12, 42], [Node([2, 3, 4]), Node([25]), Node([50])], 3)
+        >>> node.insert(1)
+        (True, None, None, None)
+        
         """
         (found, index) = recherche_dichotomique(value, self.keys)
         if (not found) :
@@ -73,6 +87,8 @@ class Node() :
                     if ( len(self.keys) > self.k) :
                         milieu, g, d = self.splitNode()
                         return False, milieu, g, d
+                    else:
+                        return True, None, None, None
                 else :
                     return True, None, None, None
         else :
@@ -106,10 +122,27 @@ class Node() :
         
         return (self.keys[milieu], g, d)
     
+    def linearisation(self):
+        """
+        Exemple(s):
+        >>> Node([12, 42], [Node([2, 3]), Node([25]), Node([50])]).linearisation()
+        [2, 3, 12, 25, 42, 50]
+        """
+        if (self.isLeaf()):
+            res = self.keys
+        else:
+            res = []
+            for i in range(0, len(self.keys)):
+                res.extend(self.childs[i].linearisation())
+                res.append(self.keys[i])
+            res.extend(self.childs[len(self.childs)-1].linearisation())
+        return res
+        
+    
     
     def __repr__(self) :
         return f"Node({self.keys})"
-        
+              
 if __name__ == '__main__':
     import doctest
     doctest.testmod(verbose=False)
\ No newline at end of file
diff --git a/src/NodeTest.py b/src/NodeTest.py
deleted file mode 100644
index 750aaf1..0000000
--- a/src/NodeTest.py
+++ /dev/null
@@ -1,7 +0,0 @@
-import unittest
-
-
-
-
-if __name__ == "__main__":
-    unittest.main()
\ No newline at end of file
diff --git a/src/BtreeTest.py b/src/test/BtreeTest.py
similarity index 100%
rename from src/BtreeTest.py
rename to src/test/BtreeTest.py
diff --git a/src/test/NodeTest.py b/src/test/NodeTest.py
new file mode 100644
index 0000000..2a1afb1
--- /dev/null
+++ b/src/test/NodeTest.py
@@ -0,0 +1,14 @@
+import unittest
+
+class NodeTest:
+    def setUp(self):
+        self.node = Node([12, 42], )
+
+
+if __name__ == "__main__":
+    import sys
+    sys.path.insert(1, './src')
+    sys.path.insert(2, '../src')
+    from Node import *
+
+    unittest.main()
\ No newline at end of file
-- 
GitLab