private void btSupprimer_Click(object sender, EventArgs e) { TreeNode node = BTreeView.SelectedNode; if (node == null) { return; } string text = node.Text; if (!int.TryParse(text, out int value)) { return; } Helper.Trace($"suppression de {value} : début traitement"); bool bOK = BTree.Remove(value); Helper.Trace($"suppression de {value} : {bOK}"); ShowTreeView(); ScanBTree(BTree); }
// Vagues successives d'ajouts et suppressions dans un BTree private void btAddSuppr_Click(object sender, EventArgs e) { try { Ordre = int.Parse(tbOrder.Text); if (Ordre < 2) { throw new ApplicationException("L'ordre est incorrect"); } int nb = int.Parse(tbNb.Text); if (nb < 1) { throw new ApplicationException("Le nombre est incorrect"); } int max = int.Parse(tbMax.Text); if (max < nb) { throw new ApplicationException("Le max est incorrect"); } Trace("début test"); // On part d'un arbre vide BTree = new BTreeClass(Ordre); List <int> valeursDispo = new List <int>(max); List <int> valeursIncluses = new List <int>(nb); for (int i = 0; i < max; i++) { valeursDispo.Add(i); } int seed = int.Parse(tbSeed.Text); Random rnd = new Random(seed); for (int i = 0; i < nb; i++) { int j = rnd.Next(valeursDispo.Count); int n = valeursDispo[j]; valeursDispo.RemoveAt(j); valeursIncluses.Add(n); bool bOK = BTree.Add(n); Helper.Assert(bOK); } // on va faire une boucle externe i dans laquelle on supprime Si clés et on en ajoute Ai, Si > Ai, de manière à vider le BTree while (BTree.NbKeys > 0) { int S = BTree.NbKeys / 2; if (S == 0) { // puisque BTree n'est pas vide, on supprime toujours au moins une clé S = 1; } for (int i = 0; i < S; i++) { int j = rnd.Next(valeursIncluses.Count); int n = valeursIncluses[j]; valeursIncluses.RemoveAt(j); valeursDispo.Add(n); bool bOK = BTree.Remove(n); Helper.Assert(bOK); //ScanBTree(BTree); } // Et on rajoute qq clés int N = S / 2; for (int i = 0; i < N; i++) { int j = rnd.Next(valeursDispo.Count); int n = valeursDispo[j]; valeursDispo.RemoveAt(j); valeursIncluses.Add(n); bool bOK = BTree.Add(n); Helper.Assert(bOK); } } } catch (ApplicationException ex) { Trace(ex.Message); BTree = null; } catch (Exception ex) { Trace(ex.ToString()); BTree = null; } Trace("test terminé"); }