将代数表达式直接转换为二叉树结构(无前缀/后缀)

时间:2013-08-09 10:01:45

标签: algorithm binary-tree

我正在互联网上寻找将代数表达式转换为二叉树的逻辑。

我只能找到你首先将代数表达式转换为后缀或前缀然后将其转换为二叉树的那些。

我确实尝试过逻辑,但它并不适用于所有情况,问题在于选择正确的操作数作为根父节点。我找到了一个通用的逻辑来破解它。

我很想知道,如果可能的话。

任何指向外部链接或逻辑答案的指针都是为了让我朝着正确的方向前进?

修改

是语法树

所以这个表达

A+(B-C)*D+E*F

应该翻译成

              |-(+)-|
              |     |
    |---(*)---|     |---(*)---|
    |         |     |         |
|---(+)---|   D     E         F
|         |
|         |
A   |--( - )--|
    |         |
    B          C

1 个答案:

答案 0 :(得分:0)

我的简单建议是:

  • 解析表达式并将其与A+(B-C)*D+E*F分开。
  • 尝试按变量/操作数量对这些组进行分组,以便您可以粗略地将表达式分成两半 - 例如组A-(E*F)在一个组中 - A - E*F和另一个是+(B-C)*D。现在,您可以递归地将每个组拆分为节点并离开。

编辑:

会产生类似这样的东西

第1步:

String left = "A - E*F";
String right = "+(B-C)*D";

第2步:

    |------------(+)---------|
    |                        |
|---(-)---|             |---(*)---|
|         |             |         |
|         |             |         D
A   |--(*)--|      |---(-)---|
    |       |      |         |
    E       F      B         C

当然,所有这些都意味着您的parser应该了解Order of operations