python中self做前缀_python实现中序遍历表达式二叉树,前缀、中缀、后缀表达式生成表达式二叉树...

#coding:UTF8

classTNode:def __init__(self, x):

self.val=x

self.left=None

self.right=NoneclassSolution:#判断是否是运算符

defisOper(self, ch):if ch in ['+', '-', '*', '/', '^', '(', ')']:returnTruereturnFalse#获取运算符所对应的优先级别

defgetOperOrder(self, ch):if ch == '(':return 1

if ch in ['+', '-']:return 2

if ch in ['*', '/']:return 3

if ch == '^':return 4

return 0

#中序遍历表达式二叉树

defInorderTree(self, pNode):if notpNode:return

ifpNode.left:#如果左子树是符号,且优先级低于父节点的优先级则需要加括号

if self.isOper(pNode.left.val) and self.getOperOrder(pNode.left.val)

res.append('(')

self.InorderTree(pNode.left)

res.append(')')else:

self.InorderTree(pNode.left)

res.append(pNode.val)ifpNode.right:#如果有子树是符号且优先级低于父节点的优先级,则需要加括号

if self.isOper(pNode.right.val) and self.getOperOrder(pNode.right.val) <=self.getOperOrder(pNode.val):

res.append('(')

self.InorderTree(pNode.right)

res.append(')')else:

self.InorderTree(pNode.right)#创建二叉树

defcreateTree(self, data):if notdata:returnch=data.pop(0)if ch == '#':returnNoneelse:

root=TNode(ch)

root.left=self.createTree(data)

root.right=self.createTree(data)returnroot#后缀表达式生成二叉树

defPostExpTree(self, data):if notdata:returnre=[]whiledata:

tmp=data.pop(0)if notself.isOper(tmp):

re.append(TNode(tmp))else:

p=TNode(tmp)

p.right=re.pop()

p.left=re.pop()

re.append(p)returnre.pop()#前缀表达式生成二叉树

defPreExpTree(self, data):

re=[]whiledata:

tmp=data.pop()if notself.isOper(tmp):

re.append(TNode(tmp))else:

p=TNode(tmp)

p.left=re.pop()

p.right=re.pop()

re.append(p)returnre.pop()#中缀表达式生成二叉树

defInExpTree(self, data):

re=[]

op=[]whiledata:

tmp=data.pop(0)if notself.isOper(tmp):

re.append(tmp)else:if tmp == '(':

op.append('(')elif tmp == ')':while op[-1] != '(':

re.append(op.pop())

op.pop()elif tmp in ['+', '-', '*', '/']:while op and op[-1] != '(' and self.getOperOrder(op[-1]) >=self.getOperOrder(tmp):

re.append(op.pop())

op.append(tmp)ifop:

re= re + op[::-1]printrereturnself.PostExpTree(re)

data= ['*', 3, '#', '#', '-', 7, '#', '#', 2, '#', '#']

s=Solution()

t1=s.createTree(data)#t1 = s.PostExpTree([3, 7, 2, '-', '*'])#t1 = s.PreExpTree(['*', 3, '-', 7, 2])#t1 = s.InExpTree([9, '+', '(', 3, '-', 1, ')', '*', 3, '+', 10, '/', 2])

res =[]

s.InorderTree(t1)

res=map(str, res)print ''.join(res)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值