diff --git a/src/BTree.py b/src/BTree.py index 4a838d50bfd7e54380749db8a2b1a17760ea4777..6bb1dc813ad5cc274a6d05934432a206c54219ef 100644 --- a/src/BTree.py +++ b/src/BTree.py @@ -53,6 +53,8 @@ class Btree() : """ return self.root.linearisation() + def isBalance(): + (truc, _, _, _) = self.root.is_ArbreB(True) def __repr__(self) : return f"Btree({self.root})" diff --git a/src/Node.py b/src/Node.py index aa69412b7a4a7a56ff12dae8535444149476fb90..46c25371f53df0c70a1cc5ed9c3860c5f840d13f 100644 --- a/src/Node.py +++ b/src/Node.py @@ -38,6 +38,32 @@ class Node() : return None else : return self.childs[index].search(value) + + + def is_ArbreB(self, is_root = False): + ok = (is_root or (self.k//2) <= len(self.keys)) and len(self.keys) <= self.k + ok = ok and all(self.keys[i] < self.keys[i+1] for i in range(len(self.keys) - 1)) + if (self.isLeaf()): + height = 0 + mini, maxi = self.keys[0], self.keys[-1] + else: + results = [child.is_ArbreB( False ) for child in self.childs] + mins = [mini for (_, _, mini, _) in results] + mqxs = [mqxi for (_, _, _, mqxi) in results] + ok = ok and all(cle[i] > maxs[i] and cel[i] < mins[i+1] for i in range(len(cles) - 1)) + print(results) + for r in range(0, len(results)-1): + (ok, h, mini, maxi) = results[i] + if (ok == False): + return False + (ok_tmp, h_tmp, maxi_tmp, mini_tmp) = results[i+1] + if (h != h_tmp): + return False + if (m + + + return (ok, height, mini, maxi) + def insert(self, value): """