Arbre binaire - Algo - Programmation
Marsh Posté le 23-12-2005 à 09:59:41
désolé mais j'ai jamais fait ça en cours, je sais faire tout ce qui passe de l'arbre binaire à une expression arithmétique mais dans l'autre sens je sais pas
Marsh Posté le 23-12-2005 à 10:28:17
C'est quoi une xepression arithmétique complèetement parenthésée?
Marsh Posté le 23-12-2005 à 10:41:14
c'est par exemple
(((a + b) / (c + d)) + (e * f)) et alors là la racine de l'arbre d'est plus les sous arbre gauche c'est l'arbre représentant ((a + b) / (c + d)) et le droit c'est l'arbre représentant (e * f)
Marsh Posté le 23-12-2005 à 10:45:00
AAAhhh ok, ca simplifie les choses.... bon je fais un algo et je le poste...
Marsh Posté le 23-12-2005 à 10:57:51
ABExp=pointeur sur noeud
=> Ca doit vouloir dire que tu dois pouvoir spécifier a = c*d par exemple.
Donc au debut tu aurais:
+
/ \
a b
Si tu dis que a = c * d tu aurais
+
/ \
* b
/ \
c d
Ci dessous voila un algo fait en C++, sans pouvoir le compiler donc propablement avec des erreurs, mais je pense que tu peux t'en inspirer pour faire ca en langage algorithmique. Si tu as des questions, n'hésite pas.
structure noeud {
val : élément
gauche : pointeur sur noeud
droite : pointeur sur noeud
}
int main void
{
noeud racine;
string expression = "(((a+b)/(c+d))+(e*f))";
creer_arbre (expression, racine);
}
int creer_arbre (string exp, noeud & racine)
{
int nb = 0;
for (i=0;i<exp.length;i++)
{
if (exp[i] == '(')
{
nb++;
}
else
if (exp[i] == ')')
{
nb--;
}
else
if (nb == 1)
{
racine.val = exp[i];
racine.gauche = new noeud ();
creer_arbre (substr (exp,1,i-1),racine.gauche);
racine.droite = new noeud ();
creer_arbre (substr (exp,i+1,exp.length-1),racine.droite);
}
}
}
Marsh Posté le 26-12-2005 à 21:06:58
j'ai juste une question très bete surement mais comme j'ai jamais fait de C ou de C++, qu'est-ce que ça veut dire quand on dit i++?
Marsh Posté le 26-12-2005 à 21:13:39
++i ça fait pareil, mais ça retourne la valeur initiale de i (avant incrémentation)
on peut faire pareil avec --
Marsh Posté le 08-01-2006 à 22:23:58
Je crois qu'il y a une petite ambiguité a soulever :
x = i++; x vaut alors la valeur de i avant incrémentation.
x = ++i; x vaut alors la valeur de i apres incrémentation.
Dans tout les cas, après l'instruction la valeur de i est bien incrémenté.
Marsh Posté le 09-01-2006 à 09:39:52
Normalement c'est ça (vérifie quand même, parceque pour une affectation, c'est pas toujours évident)
Marsh Posté le 23-12-2005 à 09:46:31
J'ai un problème que je n'arrive pas à résoudre. Il faut écrire une fonction en algorithmique qui prend en entrée un expression arithmétique complètement parenthésée et qui renvoie l'arbre binaire correspondant. Les seules opérations ont + - * /. Par exemple pour (a + b) ca renvoie un arbre de racine + de sous arbre gauche a et de sous arbre droit b. La structure est :
structure noeud {
val : élément
gauche : pointeur sur noeud
droite : pointeur sur noeud
}
C'est écrit qu'on peut aussi utiliser le type ABExp=pointeur sur noeud mais je ne sais pas ce que c'est!
Merci de m'aider