# module arbre binaire

class NoeudBinaire:
    def __init__(self, value):
        self.__value = value
        self.__left_child = None
        self.__right_child = None

    def set_left_child(self, value):
        assert self.__left_child == None
        self.__left_child = NoeudBinaire(value)
        return self.__left_child

    def left(self):
        return self.__left_child

    def set_right_child(self, value):
        assert self.__right_child == None
        self.__right_child = NoeudBinaire(value)
        return self.__right_child

    def right(self):
        return self.__right_child

    def value(self):
        return self.__value


class ArbreBinaire:
    def __init__(self):
        self.__root = None

    def set_root(self, value):
        self.__root = NoeudBinaire(value)

    def get_root(self):
        return self.__root



if __name__ == '__main__':
    # exemple d'arbre
    #         'A'
    #      /       \
    #    'B'       'C'
    #    / \       /  \
    #  'D' 'E'    'F'  'G'
    #      /  \          \
    #     'H'  'I'       'J'
    a = ArbreBinaire()
    a.set_root('A')
    nodeA = a.get_root()
    nodeB = nodeA.set_left_child('B')
    nodeC = nodeA.set_right_child('C')
    nodeD = nodeB.set_left_child('D')
    nodeE = nodeB.set_right_child('E')
    nodeF = nodeC.set_left_child('F')
    nodeG = nodeC.set_right_child('G')
    nodeH = nodeE.set_left_child('H')
    nodeI = nodeE.set_right_child('I')
    nodeJ = nodeG.set_right_child('J')

