# -*- coding: utf-8 -*-
"""
Spyder Editor

This is a temporary script file.
"""

class Noeud():
    
    def __init__(self,valeur,fils_gauche=None,fils_droit=None):
        self.valeur=valeur
        self.fils_gauche=fils_gauche
        self.fils_droit=fils_droit

    def est_feuille(self):
        return (self.fils_gauche is None and self.fils_droit is None)

    def __repr__(self):
        if self.est_feuille():
            return str(self.valeur)
            # return "<{}>".format(self.label)
        if self.fils_gauche is None:
            str_gauche = "[]"
        else:
            str_gauche = self.fils_gauche.__repr__()
        if self.fils_droit is None:
            str_droite = "[]"
        else:
            str_droite = self.fils_droit.__repr__()
        return "[{},{},{}]".format(self.valeur, str_gauche, str_droite)
    
    def cree_feuille_gauche(self,fils):
        self.fils_gauche=Noeud(fils)
    
    def cree_feuille_droite(self,fils):
        self.fils_droit=Noeud(fils)
    
    def get_valeur(self):
        return self.valeur
    
    def get_fils_gauche(self):
        return self.fils_gauche
    
    def get_fils_droit(self):
        return self.fils_droit
    
    def infix_traversal(self): 
        s =  ""
        if self.fils_gauche is not None:
            s  +=  self.fils_gauche.infix_traversal() + "  "  
        s  +=  str(self.valeur)
        if self.fils_droit is not None:
            s  +=  "  "+self.fils_droit.infix_traversal() 
        if  self.est_feuille():
            return s 
        return "("+s+")"
    
    def postfix_traversal(self): 
        s =  ""
        if self.fils_gauche is not None:
            s  +=  self.fils_gauche.postfix_traversal() 
        if self.fils_droit is not None:
            s  +=  self.fils_droit.postfix_traversal() 
        s  +=  str(self.valeur)
        if  self.est_feuille():
            return s 
        return s

    def prefix_traversal(self): 
        s =  ""
        s  +=  str(self.valeur)
        if self.fils_gauche is not None:
            s  +=  self.fils_gauche.prefix_traversal() 
        if self.fils_droit is not None:
            s  += self.fils_droit.prefix_traversal() 
        if  self.est_feuille():
            return s 
        return s
    
    def evaluer(self):
        expression = self.postfix_traversal()
        print(expression)
        return self.convertir(expression)

    def convertir(self, expression):
        pile = []
        for char in expression:
            if char == '+':
                b, a = pile.pop(), pile.pop()
                pile.append(a+b)
            elif char == '*':
                b, a = pile.pop(), pile.pop()
                pile.append(a * b)
            elif char == '-':
                b, a = pile.pop(), pile.pop()
                pile.append(b-a)
            elif char == '/':
                b, a = pile.pop(), pile.pop()
                pile.append(b/a)
           
            else:
                pile.append(int(char))
        return pile.pop()


# 3x(5+2)

arbre1=Noeud('*')
arbre1.cree_feuille_gauche(3)
arbre1.cree_feuille_droite(Noeud('+'))
arbre1.fils_droit.cree_feuille_gauche(5)
arbre1.fils_droit.cree_feuille_droite(2)

#print(arbre1.infix_traversal())

print(arbre1.evaluer())


arbre2=Noeud("+")
arbre2.cree_feuille_gauche("*")
arbre2.cree_feuille_droite("*")
arbre2.fils_gauche.cree_feuille_gauche(3)
arbre2.fils_gauche.cree_feuille_droite('+')
arbre2.fils_droit.cree_feuille_droite("x")
arbre2.fils_droit.cree_feuille_gauche(5)
arbre2.fils_gauche.fils_droit.cree_feuille_gauche(5)
arbre2.fils_gauche.fils_droit.cree_feuille_droite("x")

#print(arbre2.prefix_traversal())
    












    
    