-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathArbreBinaireRechercheC.java
More file actions
100 lines (74 loc) · 2.28 KB
/
ArbreBinaireRechercheC.java
File metadata and controls
100 lines (74 loc) · 2.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/**
* ArbreBinaireRechercheC.java
* 26 juin 2024
* @author Yamine Ibrahima
*/
package arbres;
import deque.Deque_y;
/**
*
*/
public class ArbreBinaireRechercheC<E extends Comparable<E>> extends ArbreBinaireC<E> {
/**
* @param rootdata la donnée de la racine
*/
public ArbreBinaireRechercheC(E rootdata) {
super(rootdata);
}
/**
* Insère un noeud dans l'arbre.
**/
@Override
public void insererNoeud(E data) {
// Si l'arbre est vide, set la racine
if(this.racine.data == null) {
this.setRacine(data);
return;
}
/*
* Si l'arbre n'est pas vide et qu'il existe déjà un noeud
* qui encapsule cette data, afficher un message et arrêter
* car il est proscrit d'avoir 2 noeuds avec la même donnée.
*
* */
if(rechercherNoeud(data) == data) {
System.out.println("Le noeud que vous souhaitez insérer existe déjà");
return;
}
/*
* S'il n'existe pas déjà un noeud avec cette data dans l'arbre,
* parcourir en level-order l'arbre à partir de la racine.
*
* Pour performer le parcours en level-order, il faut une file. J'utiliserai le deque que j'ai développé comme file.
*
* Lors du parcours en level-order, si un noeud ne possède pas d'enfant, performer l'insertion
*
* La particularité avec les BST est filsgauche.data < noeud.data < filsdroit.data
*
* */
Deque_y <BSNoeud<E>> file = new Deque_y <BSNoeud<E>>();
file.enqueue(this.racine);
BSNoeud<E> temp = null;
while(!file.isEmpty()) {
temp = file.dequeue();
if (data.compareTo(temp.getData()) < 0) { // Si le nouveau noeud à insérer est inferieur au noeud actuel
if (temp.filsgauche == null ) {
temp.setFilsgauche(data);
this.nodelist.add(temp.filsgauche);
return;
}else {
file.enqueue(temp.filsgauche);
continue;
}
} else if (data.compareTo(temp.getData()) > 0) { // Si le nouveau noeud à insérer est inferieur au noeud actuel
if (temp.filsdroit == null ) {
temp.setFilsdroit(data);
this.nodelist.add(temp.filsdroit);
return;
}else {
file.enqueue(temp.filsdroit);
}
}
} // Fin While
}
}