python 二叉樹實現帶括弧的四則運算(自學的孩子好可憐,不對的地方請輕責)

來源:互聯網
上載者:User

標籤:eval   end   ret   二叉樹   val   log   global   ack   實現   

#!/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 二叉樹實現帶括弧的四則運算(自學的孩子好可憐,不對的地方請輕責)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.