表示算术表达式的树
今天看了一遍《C++沉思录》的第八章,作者使用c++实现了表示算术表达式的树。
就是像 (-3)*(3+3)的树就是:
然后,我就用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可以看到,非常方便。