首页 > 代码库 > python 二叉树实现带括号的四则运算(自学的孩子好可怜,不对的地方请轻责)

python 二叉树实现带括号的四则运算(自学的孩子好可怜,不对的地方请轻责)

#!/usr/bin/python#* encoding=utf-8s = "20-5*(0+1)*5^(6-2^2)"c = 0top = [0,s[c],0]op = [["0","1","2","3","4","5","6","7","8","9"],["+","-"],["*","/"],["^"]]def getLev(ch):    for c1 in range(0, len(op)):        for c2 in range(0, len(op[c1])):            if (op[c1][c2]==ch):                return c1            elif (len(ch)>1):                match = 0                for c3 in range(0, len(ch)):                    if (getLev(ch[c3])>=0):                        match+=1                if (match==len(ch)):return c1    return -1def makeTree(root):    global c    global s    c += 1    if (c>=len(s)):        return root    if (s[c]=="("):        c+=1        node = [0, s[c], 0]        node = makeTree(node)    elif (s[c]==")"):        return root    else: node=[0, s[c], 0]    levRoot = getLev(root[1])    levCur = getLev(node[1])    print levRoot, levCur, root[1], node[1]    if (levCur>=levRoot):        if ((levRoot==0 and levCur!=levRoot)         or (levRoot!=0 and levCur==levRoot)):            node[0] = root            root = node            return makeTree(root)        elif (levRoot==0 and levCur==0):            root[1] += node[1]            return makeTree(root)        else:            node[0] = root[2]            root[2] = makeTree(node)            return makeTree(root)     else:        if (levCur==0 or node[0]!=0):            root[2] = node            return makeTree(root)         else:            c-=1            return roottop = makeTree(top)#print top def getTree(node):    ret = []     if (node[0]!=0):        _tmp = getTree(node[0])        for c in range(0, len(_tmp)):            ret.append(_tmp[c])           if (node[2]!=0):        _tmp = getTree(node[2])        for c in range(0, len(_tmp)):            ret.append(_tmp[c])           ret.append(node[1])    return ret exp = getTree(top)print exp def calc():    stack=[]    for c in range(0, len(exp)):        if (exp[c]>=‘0‘ and exp[c]<=‘9‘):            stack.append(exp[c])        else:            op = exp[c]            n2 = stack.pop()            n1 = stack.pop()            if (op!="^"):                v = n1+op+n2            else:                v = "pow(%s,%s)"%(n1,n2)            print v, eval(v)            stack.append("%s"%eval(v))    return stack.pop()print calc()

  

python 二叉树实现带括号的四则运算(自学的孩子好可怜,不对的地方请轻责)