用python实现表达式树
在此实现中,我们采用了朴实的字符串搜索方法,而没有采用栈等方式。
- 判断括号的层数,对于字符串中每一个字符所在的括号层数做标记。
- 如果表达式是一个数字,则直接返回。
- 寻找层数为0(即最外层)的最右侧‘+’或‘-’,对符号左右侧分别递归调用构造函数。
- 如果未找到,则寻找最右侧‘*’或‘/’,对符号左右侧分别调用递归构造函数。
首先定义符号的枚举类
import enum
class Operators(enum.Enum):
equal = 0
plus = 1
minus = 2
times = 3
divide = 4
class EquationTree:
def __init__(self, operator=None, left=None, right=None):
# elements of the branches can be numbers or trees
self.left = left
self.right = right
self.operator = operator
@classmethod
def build_with_exp(cls, exp):
if exp[0] == '(' and exp[-1] == ')':
exp = exp[1:-1]
# deal with pure number
try:
number = float(exp)
return number
except:
pass
# deal with ()
level = 0
levels = []
for i in range(len(exp)):
# in reverse order
if exp[i] == '(':
level += 1
if exp[i] == ')':
level -= 1
levels.append(level)
# find the rightest + or -
index = -1
op = None
for i in range(<