class TNode:     
    def __init__(self, data=None, left=None, right=None):
        self.data=data
        self.left=left
        self.right=right

    # Soluzione punto I
        
    @staticmethod    
    def buildBalTree(inList):
        if not inList:
            return
        
        mid = (len(inList))/2
        currNode = TNode(inList[mid])
        currNode.left  = TNode.buildBalTree(inList[:mid])
        currNode.right = TNode.buildBalTree(inList[mid+1:])

        return currNode
                                                                            
        #la profondita' dell'albero costruito e':
        #int(math.floor(math.log(len(a),2)))+1
    
    # Soluzione punto II
    
    def printDF_IO(self):
        if self.left:
            self.left.printDF_IO()
        print(str(self.data))    
        if self.right:
            self.right.printDF_IO()

    
    # Soluzione punto III
    
    def listDF_IO(self, outlist=None):
        if outlist is None:
            outlist=[]
        if self.left:
            self.left.listDF_IO(outlist)
        outlist.append(self.data)    
        if self.right:
            self.right.listDF_IO(outlist)
        return outlist

