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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 二叉树实现带括号的四则运算(自学的孩子好可怜,不对的地方请轻责)相关的知识,希望对你有一定的参考价值。

#!/usr/bin/python
#* encoding=utf-8
s = "20-5*(0+1)*5^(6-2^2)"

c = 0
top = [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 -1

def 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 root

top = 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 二叉树实现带括号的四则运算(自学的孩子好可怜,不对的地方请轻责)的主要内容,如果未能解决你的问题,请参考以下文章

python 二叉树实现四则运算?

带括号的简单计算器如何工作?

编写一个程序,实现二叉树的各种基本运算

二叉树的建立及基本操作

[转] 多叉树转换二叉树

多叉树转换二叉树