import operator
from listoflist import *

def evaluate2(parseTree):
    """ evaluate a parse tree represented using list of lists """
    opers = {'+':operator.add, '-':operator.sub, 
             '*':operator.mul, '/':operator.div}
    
    leftC = getLeftChild(parseTree)
    rightC = getRightChild(parseTree)
    
    if leftC and rightC:
        fn = opers[getRootValue(parseTree)]
        return fn(evaluate2(leftC),evaluate2(rightC))
    else: 
        return getRootValue(parseTree)
  
    
# a parse tree for (5+15) / (2*5)
tree = ['/', 
        ['+',
         [5, [],[]],
         [15,[],[]]
        ],
        ['*',
         [2,[],[]],
         [5,[],[]]
        ]
       ]

print evaluate2(tree)
         
        