C'est le principe de la programmation récursive.
Tu dois faire une fonction qui prend en entrée un noeud de ton arbre (une expression dans ton cas). Cette fonction découpe ton expression avec part(), et peut faire des calculs en fonction de l'opérateur qu'a retourné part()
Puis s'appelle elle-même avec chacune des deux sous expressions et puis cette fonction mouline ces deux résultats et renvoie ce qui t'intéresse comme valeur de retour.
Si ton expression n'est plus découpable avec part(), la fonction va directement renvoyer un résultat sans s'appeler récursivement.
Comme ça la valeur de retour de chaque fonction contient le résultat combiné de chacune des sous expressions.
si tu veux transformer x+y*z en {"+", "x", "*", "y", "z"} admettons, ta fonction ressemblera à : (c'est du pseudo code, pas du basic)
func decoupe(e)
local op, l1, l2
if part(e)=0 then
return {part(e,0)} // crée une liste de 1 seul élément avec la variable dedans
else
part(e, 0) -> op // récupère l'operateur
decoupe(part(e, 1)) -> l1 // découpe la partie gauche
decoupe(part(e, 2)) -> l2 // découpe la partie droite
return liste(op, l1, l2) // met à la suite dans une liste l'operateur, et les listes des parties gauches et droites. tu peux combiner les résultats comme tu le souhaites
end if
end func
la fonction liste n'existe pas bien sûr, tu dois te débrouiller avec des augment et compagnie et ça part du principe que tu n'as que 2 operandes pour chaque operateur, mais le principe est là.
Et les résultats de chaque étape de la découpe sont enregistré dans les variables locales puis combinés à la fin
Ce n'est pas la seule solution, mais en ti-basic je pense que c'est la plus simple.