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

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

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

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

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

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

并将其存储在这样的树中

/ ^ 2 * 3 5 + 2 3 

任何人都可以帮助算法吗?

看一下分流码算法 。 来自维基百科:

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

下面是一些C ++代码,用于创建使用两个堆栈的二进制表达式树 ,一个用于运算符,另一个用于操作数。 最终,操作数堆栈包含一个元素,即完整的二进制表达式树。