|

楼主 |
发表于 2023-12-30 17:54:57
|
显示全部楼层
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def evaluateExpressionTree(root):
if root.left is None and root.right is None:
return int(root.val)
else:
left_val = evaluateExpressionTree(root.left)
right_val = evaluateExpressionTree(root.right)
if root.val == '+':
return left_val + right_val
elif root.val == '-':
return left_val - right_val
elif root.val == '*':
return left_val * right_val
elif root.val == '/':
return left_val / right_val
def buildExpressionTree(expression, variables):
operators = set(['+', '-', '*', '/'])
optr_stack = []
expt_stack = []
for char in expression:
if char == ' ':
continue
elif char == '(':
optr_stack.append(char)
elif char.isalpha():
node = TreeNode(variables[char])
expt_stack.append(node)
elif char in operators:
while (
optr_stack
and optr_stack[-1] != '('
and precedence(optr_stack[-1]) >= precedence(char)
):
root = TreeNode(optr_stack.pop())
root.right = expt_stack.pop()
root.left = expt_stack.pop()
expt_stack.append(root)
optr_stack.append(char)
elif char == ')':
while optr_stack and optr_stack[-1] != '(':
root = TreeNode(optr_stack.pop())
root.right = expt_stack.pop()
root.left = expt_stack.pop()
expt_stack.append(root)
if optr_stack and optr_stack[-1] == '(':
optr_stack.pop()
while optr_stack:
root = TreeNode(optr_stack.pop())
root.right = expt_stack.pop()
root.left = expt_stack.pop()
expt_stack.append(root)
return expt_stack[0]
def precedence(op):
if op == '+' or op == '-':
return 1
elif op == '*' or op == '/':
return 2
else:
return 0
expression = "a*(b-c)+d*(e+f)"
variables = {'a': 2, 'b': 3, 'c': 4, 'd': 5, 'e': 6, 'f': 7}
root = buildExpressionTree(expression, variables)
result = evaluateExpressionTree(root)
print("表达式的值为:", result)
给每行代码加上注释 |
|