表示算术表达式的树

今天看了一遍《C++沉思录》的第八章,作者使用c++实现了表示算术表达式的树。

就是像 (-3)*(3+3)的树就是:

[img]http://dl.iteye.com/upload/attachment/407567/7ebf4acc-79bd-3cce-9068-34b6300c381d.gif[/img]

然后,我就用python实现了一下。因为python与C++不同,(作者使用了句柄类),我这里就没考虑这么多。

下面是实现:


# -*- coding:utf-8 -*-
class One_node(object):
def __init__(self,n):
self.n=n
def __str__(self):
return str(self.n)

class Unary_node(object):
def __init__(self,op,n):
self.op=op
self.n=n
def __str__(self):
return "("+self.op+str(self.n)+")"
class Binary_node(object):
def __init__(self,op,left,right):
self.op=op
self.left=left
self.right=right
def __str__(self):
return "("+str(self.left)+self.op+str(self.right)+")"
class Ternary_node(object):
def __init__(self,left,middle,right):
self.left=left
self.middle=middle
self.right=right
def __str__(self):
return "("+str(self.left)+"?"+str(self.middle)+":"+str(self.right)+")"

def Expr(*argc):
if len(argc)==1:
return One_node(*argc)
elif len(argc)==2:
return Unary_node(*argc)
elif len(argc)==3:
return Binary_node(*argc)

if __name__=="__main__":
x=Expr(10)
print x
x=Expr("-",10)
print x
x=Expr("*",2,10)
print x
x=Expr("*",Expr(10),Expr("-",3))
print x
x=Expr("*",x,x)
print x
x=Ternary_node(x,x,x)
print x


可以看到,非常方便。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值