首页 > 代码库 > 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 二叉树实现带括号的四则运算(自学的孩子好可怜,不对的地方请轻责)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。