计算二叉树中的表达式 Java

Evaluating an Expression in a Binary Tree Java

我创建了一个表达式的二叉树,并将运算符(+、-、/、*)作为根,将操作数(值)作为子节点 left/right。我需要使用参数 (T, v) 在二叉树中评估该表达式,其中 'T' 是二叉树,'v' 是后序遍历开始的节点。

我搜索了后序遍历的工作原理以及我所理解的所有内容。但是我不知道如何使用节点 'v' 来实现后序遍历的代码。

我的方法是这样的...

public int evaluateExpression (LinkedBinaryTree<T> tree, Position<T> v) {

}

这应该 return 运算符正在其运算符(根的子级)上使用。所以,我明白该怎么做,我被困在如何实际去做上。 -.-

您不需要提供整棵树,也不需要单独的 Position class。每个子树都是一棵树。你只需要这样的东西:

public class <T extends Number> ExpressionTree<T> {
    private ExpressionTree<T> left, right;
    private T value;
    private int operator;

    // constructors, getters, setters, etc. elided

    public T evaluateExpression() {
        // Here I am assuming a <T> value field that is set if the node
        // is a literal value rather than an expression subtree with left and right children.
        if (this.value != null)
            return this.value;
        // Evaluate the subtree
        switch (this.operator) {
        case '+':
            return left.evaluateExpression()+right.evaluateExpression();
        // etc for the other operators
        }
    }

您不应该使用下面评论中提到的 LinkedBinaryTree class。它无论如何都不是为此目的而设计的,在我看来,即使是为了它自己的目的,它也显得不必要地复杂。

通常,在现实世界中,您会按照 EJP 的建议进行操作。

就是说,后序迭代器会以正确的顺序为您提供存储在树中的值和运算符,基本上可以做到这一点:

  • 如果元素是数字,将其压入数字堆栈
  • 如果元素是运算,则从数栈中弹出两个元素,按运算处理并压入结果

遍历后,return栈上唯一的元素