查找并替换表达式树的一部分,同时保留子节点

问题描述 投票:0回答:0

我有 3 个表情树。

  1. 表情
  2. 公理_来自
  3. 公理_to

给定表达式树,找到与 axiom_from 匹配的子树并将其替换为 axiom_to。这本身很简单,但 axiom_from 可能包含与任何内容匹配的符号节点,并且它的任何子节点都应移动到 axiom_to 中相应的符号节点。 (见图)

enter image description here

这里是表达式的定义:

#[derive(Debug, Clone, PartialEq)]
pub enum Expr {
    Number(f64),
    UnaryMinus(Box<Expr>),
    BinOp {
        lhs: Box<Expr>,
        op: Op,
        rhs: Box<Expr>,
    },
    Symbol(i32), // Symbols can match anything. Fields(id)
}

#[derive(Debug, Clone, PartialEq)]
pub enum Op {
    Add,
    Subtract,
    Multiply,
    Divide,
    Modulo,
    Power,
}

甚至算法的名称也能对我有很大帮助。谢谢您的帮助!

algorithm rust binary-tree
© www.soinside.com 2019 - 2024. All rights reserved.