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

时间:2012-04-24 18:05:49

标签: java math tree expression binary-tree

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

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

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

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

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

并将其存储在像这样的树

             /
        ^          2
    *       3
  5   +
     2  3

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

2 个答案:

答案 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,一个用于运算符,另一个用于操作数。最终,操作数堆栈包含一个元素,即完整的二进制表达式树。