Arbres B. Rech.
Listes opérations
Poo
Récursivité
Ep 41
le document
l'algorithme
Issue de : 23-NSI-29
EXERCICE 1
Un arbre binaire est soit vide, reprĂ©sentĂ© en Python par la valeur None, soit un nĆud, contenant une Ă©tiquette et deux sous-arbres gauche et droit et reprĂ©sentĂ© par une instance
de la classe Noeud donnée ci-dessous.
đ Script Python class Noeud :
def __init__ ( self , etiquette , gauche , droit ):
self . v = etiquette
self . gauche = gauche
self . droit = droit
Lâarbre ci-dessus sera donc implĂ©mentĂ© de la maniĂšre suivante :
đ Script Python a = Noeud ( 1 , Noeud ( 4 , None , None ),
Noeud ( 0 , None ,
Noeud ( 7 , None , None )))
Ăcrire une fonction rĂ©cursive taille
prenant en paramĂštre une instance a
de la classe Arbre
et qui renvoie la taille de lâarbre que cette instance implĂ©mente.
Ăcrire de mĂȘme une fonction rĂ©cursive hauteur
prenant en paramĂštre une instance a
de la classe Arbre
et qui renvoie la hauteur de lâarbre que cette instance implĂ©mente.
On considĂšre que la hauteur dâun arbre vide est -1 et la taille dâun arbre vide est 0.
đ Script Python >>> hauteur ( a )
2
>>> taille ( a )
4
>>> hauteur ( None )
- 1
>>> taille ( None )
0
>>> hauteur ( Noeud ( 1 , None , None ))
0
>>> taille ( Noeud ( 1 , None , None ))
1
RĂ©ponse
Complétez le code ci-dessous
# Mettez votre code icibksl-nlclass Noeud:bksl-nl def py-undpy-undinitpy-undpy-und(self, etiquette, gauche, droit):bksl-nl self.v = etiquettebksl-nl self.gauche = gauchebksl-nl self.droit = droitbksl-nlbksl-nla = Noeud(1, Noeud(4, None, None),bksl-nl Noeud(0, None,bksl-nl Noeud(7, None, None)))bksl-nl
Solution
class Noeud:bksl-nl def py-undpy-undinitpy-undpy-und(self, etiquette, gauche, droit):bksl-nl self.v = etiquettebksl-nl self.gauche = gauchebksl-nl self.droit = droitbksl-nlbksl-nldef taille(a):bksl-nl if a is None:bksl-nl return 0bksl-nl else:bksl-nl return 1 + taille(a.gauche) + taille(a.droit)bksl-nlbksl-nldef hauteur(a):bksl-nl if a is None:bksl-nl return -1bksl-nl else:bksl-nl return 1 + max(hauteur(a.gauche), hauteur(a.droit))bksl-nlbksl-nla = Noeud(1, Noeud(4, None, None),bksl-nl Noeud(0, None,bksl-nl Noeud(7, None, None)))bksl-nlbksl-nltry:bksl-nl assert hauteur(a) == 2bksl-nl assert taille(a) == 4bksl-nl assert hauteur(None) == -1bksl-nl assert taille(None) == 0bksl-nl assert hauteur(Noeud(1, None, None)) == 0bksl-nl assert taille(Noeud(1, None, None)) == 1bksl-nl print('Tout semble correct đ')bksl-nlbksl-nlexcept AssertionError as asser:bksl-nl print('Le rĂ©sultat de votre fonction n\'est pas conforme đ€')bksl-nl
EXERCICE 2
On rappelle que les tableaux sont représentés par des listes en Python du type list.
Le but de cet exercice est dâĂ©crire une fonction ajoute
qui prend en paramĂštres trois arguments indice
, element
et tab
et renvoie un tableau tab_ins
dans lequel les Ă©lĂ©ments sont ceux du tableau tab avec, en plus, lâĂ©lĂ©ment element Ă lâindice indice.
On considÚre que les variables indice et element sont des entiers positifs et que les éléments de tab sont également des entiers.
En réalisant cette insertion, Les éléments du tableau tab
dont les indices sont supérieurs ou égaux à indice apparaissent décalés vers la droite dans le tableau tab_ins.
Si indice
est Ă©gal au nombre dâĂ©lĂ©ments du tableau tab
, lâĂ©lĂ©ment element
est ajouté dans tab_ins
aprÚs tous les éléments du tableau tab.
đ Script Python def ajoute ( indice , element , tab ):
'''Renvoie un nouveau tableau obtenu en insérant
element Ă l'indice indice dans le tableau tab.'''
nbre_elts = len ( tab )
tab_ins = [ 0 ] * ( nbre_elts + 1 )
for i in range ( indice ):
tab_ins [ i ] = ...
tab_ins [ ... ] = ...
for i in range ( indice + 1 , nbre_elts + 1 ):
tab_ins [ i ] = ...
return tab_ins
Exemple :
đ Script Python >>> ajoute ( 1 , 4 , [ 7 , 8 , 9 ])
[ 7 , 4 , 8 , 9 ]
>>> ajoute ( 3 , 4 , [ 7 , 8 , 9 ])
[ 7 , 8 , 9 , 4 ]
>>> ajoute ( 0 , 4 , [ 7 , 8 , 9 ])
[ 4 , 7 , 8 , 9 ]
RĂ©ponse
Complétez le code ci-dessous
def ajoute(indice, element, liste):bksl-nl nbrepy-undelts = len(liste)bksl-nl L = [0 for i in range(nbrepy-undelts + 1)]bksl-nl if ...:bksl-nl for i in range(indice):bksl-nl L[i] = ...bksl-nl L[...] = ...bksl-nl for i in range(indice + 1, nbrepy-undelts + 1):bksl-nl L[i] = ...bksl-nl else:bksl-nl for i in range(nbrepy-undelts):bksl-nl L[i] = ...bksl-nl L[...] = ...bksl-nl return Lbksl-nlbksl-nl
Solution
def ajoute(indice, element, liste):bksl-nl nbrepy-undelts = len(liste)bksl-nl L = [0 for i in range(nbrepy-undelts + 1)]bksl-nl if indice < nbrepy-undelts:bksl-nl for i in range(indice):bksl-nl L[i] = liste[i]bksl-nl L[indice] = elementbksl-nl for i in range(indice + 1, nbrepy-undelts + 1):bksl-nl L[i] = liste[i-1]bksl-nl else:bksl-nl for i in range(nbrepy-undelts):bksl-nl L[i] = liste[i]bksl-nl L[nbrepy-undelts] = element bksl-nl return Lbksl-nlbksl-nltry:bksl-nl assert ajoute(1, 4, [7, 8, 9]) == [7, 4, 8, 9]bksl-nl assert ajoute(3, 4, [7, 8, 9]) == [7, 8, 9, 4]bksl-nl assert ajoute(0, 4, [7, 8, 9]) == [4, 7, 8, 9]bksl-nl print('Tout semble correct đ')bksl-nlbksl-nlexcept AssertionError as asser:bksl-nl print('Le rĂ©sultat de votre fonction n\'est pas conforme đ€')bksl-nl