You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求实现基于二叉树的简单符号方程求解器(附代码框架)

基于二叉树的符号方程求解器实现

下面是完成后的Node类代码,包含insert和evaluate方法的实现,完全符合你的需求:

class Node:
    def __init__(self):
        self.value = None  # 存储(TYPE, VALUE)格式的元组
        self.left = None
        self.right = None

    def insert(self, data):
        # 校验输入格式合法性
        if not isinstance(data, tuple) or len(data) != 2:
            raise ValueError("输入必须是(TYPE, VALUE)格式的元组")
        node_type, node_value = data

        # 根节点未初始化时直接赋值
        if self.value is None:
            self.value = data
            return

        # 操作数是叶子节点,不允许插入新元素
        if self.value[0] == 'OPERAND':
            raise TypeError("操作数节点为叶子节点,无法插入新元素")

        # 运算符节点优先填充左子节点
        if self.left is None:
            self.left = Node()
            self.left.insert(data)
        elif self.left.value[0] == 'OPERATOR':
            # 左子节点为运算符,递归插入左子树
            self.left.insert(data)
        else:
            # 左子节点为操作数,填充右子节点
            if self.right is None:
                self.right = Node()
                self.right.insert(data)
            elif self.right.value[0] == 'OPERATOR':
                self.right.insert(data)
            else:
                raise ValueError("当前运算符节点的左右子节点已填满")

    def evaluate(self):
        if self.value is None:
            raise ValueError("节点未初始化")

        node_type, node_value = self.value

        # 操作数直接返回数值
        if node_type == 'OPERAND':
            return node_value

        # 运算符必须包含左右两个子节点
        if self.left is None or self.right is None:
            raise ValueError("运算符节点必须包含左右两个子节点")

        left_val = self.left.evaluate()
        right_val = self.right.evaluate()

        # 执行对应运算
        if node_value == '+':
            return left_val + right_val
        elif node_value == '-':
            return left_val - right_val
        elif node_value == '*':
            return left_val * right_val
        elif node_value == '^':
            return left_val ** right_val
        else:
            raise ValueError(f"不支持的运算符: {node_value}")

核心逻辑说明

  • insert方法:
    • 先校验输入格式,确保是合法的(TYPE, VALUE)元组
    • 根节点为空时直接赋值
    • 操作数作为叶子节点,不允许插入新元素
    • 运算符节点优先填充左子节点,左子节点为运算符时递归插入左子树;左子节点为操作数时再填充右子节点,右子节点为运算符时同样递归插入右子树
  • evaluate方法:
    • 递归遍历二叉树,操作数直接返回数值
    • 运算符节点先计算左右子节点的结果,再执行对应运算
    • 处理了未初始化节点、运算符缺少子节点、未知运算符等异常情况

使用示例

# 构建表达式: 3 + (2 * 4)
root = Node()
root.insert(('OPERATOR', '+'))
root.insert(('OPERAND', 3))
root.insert(('OPERATOR', '*'))
root.insert(('OPERAND', 2))
root.insert(('OPERAND', 4))

print(root.evaluate())  # 输出: 11

内容的提问来源于stack exchange,提问作者jamitha rathnayaka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 03:40:13