Java 将中缀表达式(带括号)转换为二叉树

Java 将中缀表达式(带括号)转换为二叉树,java,math,tree,expression,binary-tree,Java,Math,Tree,Expression,Binary Tree,作为Java赋值的一部分,我必须获取一个输入算术表达式并将其存储在二叉树中 除了读入表达式字符串并将其存储在二叉树中的部分之外,我已经完成了赋值所需的所有工作 我创建了一个名为BinaryTree的类。它唯一的字段是一个名为root的树节点。此treenode在BinaryTree中定义为内部类。它有3个字段、一个通用数据字段和两个子字段(左和右),它们是BinaryTree类型 我很难定义读取表达式的算法,例如 (5*(2+3)^3)/2 把它放在这样的树上 /

作为Java赋值的一部分,我必须获取一个输入算术表达式并将其存储在二叉树中

除了读入表达式字符串并将其存储在二叉树中的部分之外,我已经完成了赋值所需的所有工作

我创建了一个名为BinaryTree的类。它唯一的字段是一个名为root的树节点。此treenode在BinaryTree中定义为内部类。它有3个字段、一个通用数据字段和两个子字段(左和右),它们是BinaryTree类型

我很难定义读取表达式的算法,例如

(5*(2+3)^3)/2

把它放在这样的树上

             /
        ^          2
    *       3
  5   +
     2  3
有人能帮忙做这个算法吗?

看一下。来自维基百科:

在计算机科学中,调车场算法是一种解析中缀符号中指定的数学表达式的方法。它可以用于以反向波兰符号(RPN)或抽象语法树(AST)的形式生成输出。该算法由Edsger Dijkstra发明,并命名为“调车场”算法,因为其操作类似于铁路调车场。Dijkstra首先在Mathematisch Centrum报告MR 34/61中描述了调车场算法


这里有一些使用两个堆栈,一个用于运算符,另一个用于操作数。最后,操作数堆栈包含一个元素,即完整的二元表达式树。

首先尝试一个简单的表达式字符串:
1+2
。当你得到它时,做:
1+2*3
。更复杂的是:
1*2+3
。最后:
(1+2)*3
您想解释一下算法吗?