作为Java赋值的一部分,我必须使用输入算术表达式并将其存储在二叉树中。
除了我在表达式字符串中读取的部分并将其存储在二叉树中之外,我已完成了赋值所需的一切。
我创建了一个名为BinaryTree的类。它唯一的领域是一个名为root的treenode。这个treenode被定义为BinaryTree中的内部类。它有3个字段,一个通用数据字段,以及两个类型为BinaryTree的子节点(左和右)。
我很难定义一个用于读取表达式的算法,例如
(5 *(2 + 3)^ 3)/ 2
并将其存储在像这样的树
中 /
^ 2
* 3
5 +
2 3
任何人都可以帮助算法吗?
答案 0 :(得分:6)
看看shunting-yard algorithm。来自维基百科:
在计算机科学中,分流码算法是一种解析中缀符号中指定的数学表达式的方法。它可用于以反向波兰表示法(RPN)或抽象语法树(AST)生成输出。该算法由Edsger Dijkstra发明,并命名为“调车场”算法,因为其操作类似于铁路调车场。 Dijkstra首先在数学中心报告MR 34/61中描述了Shunting Yard算法。
答案 1 :(得分:3)
这是一些使用两个堆栈的C++ code to create a binary expression tree,一个用于运算符,另一个用于操作数。最终,操作数堆栈包含一个元素,即完整的二进制表达式树。