【问题标题】:Convert Algebraic Expression directly into Binary Tree Structure (sans prefix / postfix)将代数表达式直接转换为二叉树结构(无前缀/后缀)
【发布时间】:2013-08-12 23:03:30
【问题描述】:

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

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

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

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

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

编辑

是的语法树

所以这个表达式

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

应该翻译成

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

【问题讨论】:

  • 你能举个例子吗? “将代数表达式转换为二叉树”是什么意思你的意思是某种与代数表达式相关的语法树吗?
  • 只是为了正确:这个翻译是错误的,因为 * 的优先级高于 +。语法树等价于 (A+(B-C))*D+E*F

标签: algorithm binary-tree


【解决方案1】:

我的简单建议是:

  • 解析表达式并将其分隔为 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

【讨论】:

    猜你喜欢
    • 2018-01-29
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    相关资源
    最近更新 更多