Bonjour à tous,
Je ne sais pas si je poste dans la bonne catégorie de forum (car je n'ai pas trouvé mieux) mais voici mon problème :
Je suis en train de faire un exercice à propos des arbres binaires. L'idée est d'après une classe Node (qui représente un noeud de l'arbre), écrire une fonction "serializable(node)" qui transforme cet arbre en chaîne de caractères.
J'ai déjà codé cette fonction et voici la manière dont j'ai formaté cette chaine :
Code ruby : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 root(left(left.left($,$),$),right($,$)) ou encore 1(7($,$),3($,3($,$)))
avec root(left,right) qui représente un noeud ("root", "left" et "right" peuvent être n'importe quelle chaine de caractères) et "$" l'absence de noeud fils.
Maintenant il m'est demandé d'écrire la fonction "deserialize(str)" qui effectue l'opération inverse.
Il me faut donc un moyen de parser la chaine et d'extraire les composantes (valeur du noeud, gauche et droite) du noeud récursivement.
Je code en Ruby donc je peux utiliser facilement la fonction "String#split" qui prends en argument une expression régulière.
J'aimerais donc avoir :
Code ruby : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 root(left(left.left($,$),$),right($,$)) left(left.left($,$),$) right($,$) left.left($,$) $ $ $ $ $ ou encore 1(7($,$),3($,3($,$))) 7($,$) 3($,3($,$)) $ $ $ 3($,$)
et ainsi reconstruire l'arbre binaire.
Ma question : à quoi doit ressembler cette expression régulière (parce que /\((.+),(.+)\)/ ne marche pas)
N'hésitez pas à me poser des question si ce n'est pas assez clair. Merci d'avance
Partager