读书人

示意算术表达式的树

发布时间: 2012-12-22 12:05:05 作者: rapoo

表示算术表达式的树

今天看了一遍《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


可以看到,非常方便。

读书人网 >编程

热点推荐