java - 评估二叉树 Java 中的表达式

标签 java algorithm binary-tree

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

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

我的方法是这样的......

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

}

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

最佳答案

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

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 类。它不是为此目的而设计的,在我看来,即使是为了它自己的目的,它也显得不必要地复杂。

关于java - 评估二叉树 Java 中的表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36585708/

相关文章:

javascript - 检查字符串数组是否有回文的运行时

对齐和比较两组可能不完整且忽略缩放的向量的算法?

无重排整数分区的JavaScript递归实现

java - 在二叉搜索树中查找表兄弟

java - 增加 AcroFields(iTextSharp) 的宽度

java - JProfiler7 : Set Up Local Proxy

java - 如何将 SFTP 中的 FileObject 保存为本地文件?

algorithm - 从左到右和自下而上构造和打印二叉树(不平衡二叉树)的元素

c - 为什么我的字典没有正确计算出现次数?

java - 从远程机器访问 Grails ActiveMQ