网站首页 > 技术文章 正文
表达式树(Expression Tree)可以用于实现简单的数学表达式求值。表达式树是一种二叉树,其中每个节点表示一个操作符或操作数,而叶子节点表示操作数。通过遍历表达式树,可以按照特定的规则对表达式进行求值。
下面是一个使用Python实现表达式树求值的示例代码:
class Node:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
def evaluate_expression_tree(root):
if root is None:
return 0
# 如果是叶子节点,返回其数值
if root.left is None and root.right is None:
return int(root.value)
# 递归计算左子树和右子树的值
left_value = evaluate_expression_tree(root.left)
right_value = evaluate_expression_tree(root.right)
# 根据操作符计算结果
if root.value == '+':
return left_value + right_value
elif root.value == '-':
return left_value - right_value
elif root.value == '*':
return left_value * right_value
elif root.value == '/':
return left_value / right_value
# 构建表达式树
def build_expression_tree(expression):
stack = []
# 遍历表达式
for char in expression:
# 如果是操作数,创建一个节点并入栈
if char.isdigit():
node = Node(char)
stack.append(node)
# 如果是操作符,创建一个节点,并将栈顶两个元素作为其左右子节点
else:
node = Node(char)
right_node = stack.pop()
left_node = stack.pop()
node.right = right_node
node.left = left_node
stack.append(node)
# 返回根节点
return stack.pop()
# 测试表达式求值
expression = "3+4*5-6/2"
root = build_expression_tree(expression)
result = evaluate_expression_tree(root)
print("表达式求值结果:", result)
在上述示例中,我们定义了Node类来表示表达式树的节点。evaluate_expression_tree函数用于递归求值表达式树,build_expression_tree函数用于构建表达式树。
我们以"3+4*5-6/2"为例进行测试。首先,我们通过build_expression_tree函数构建表达式树,然后使用evaluate_expression_tree函数对表达式树进行求值。最终输出结果为"表达式求值结果:17.0"。
希望这个示例能够帮助你理解如何使用Python实现表达式树,并进行简单的数学表达式求值。
猜你喜欢
- 2025-06-24 python django查询集缓存原理及字段查询表达式
- 2025-06-24 python __str__、__repr__和__bytes__功能及应用示例
- 2025-06-24 python3-运算符优先级(python运算符优先级遵循的规则)
- 2025-06-24 Python 数据分析模块profiling功能及应用
- 2025-06-24 技术干货|Python MySQL客户端库PyMySQL常见用法
- 2025-06-24 python3将mysql数据库数据库缓存到redis应用场景
- 2025-06-24 Python字符串操作:替换、匹配、格式化、索引及返回类型
- 06-24Python调用Docker API的使用方式(pycharm docker 调试)
- 06-24青少年Python编程系列28:Python中函数的递归调用
- 06-24python调用sqlite数据库案例(python 调用数据库)
- 06-24【Python机器学习系列】基于Flask来构建API调用机器学习模型服务
- 06-24通过pybind11来实现python调用C++接口(一)
- 06-24Python编程调用Deepseek API创建智能体
- 06-24python多装饰器针对函数、类、方法的调用顺序说明
- 06-24Python Qt GUI设计:Python调用UI文件的两种方法(基础篇—3)
- 270℃Python短文,Python中的嵌套条件语句(六)
- 268℃python笔记:for循环嵌套。end=""的作用,图形打印
- 266℃PythonNet:实现Python与.Net代码相互调用!
- 262℃Python实现字符串小写转大写并写入文件
- 261℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 121℃原来2025是完美的平方年,一起探索六种平方的算吧
- 101℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 96℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
-
- Python调用Docker API的使用方式(pycharm docker 调试)
- 青少年Python编程系列28:Python中函数的递归调用
- python调用sqlite数据库案例(python 调用数据库)
- 【Python机器学习系列】基于Flask来构建API调用机器学习模型服务
- 通过pybind11来实现python调用C++接口(一)
- Python编程调用Deepseek API创建智能体
- python多装饰器针对函数、类、方法的调用顺序说明
- Python Qt GUI设计:Python调用UI文件的两种方法(基础篇—3)
- Python | Django 外部脚本调用 models 数据库
- 自学Python第九天——操作列表(python操作步骤)
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)