当前位置: 首页 > 知识库问答 >
问题:

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

苏麒
2023-03-14

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

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

我创建了一个名为BinaryTree的类。它唯一的字段是一个称为根的树节点。此树节点在BinaryTree中定义为内部类。它有3个字段、一个通用数据字段和两个子字段(左和右),它们是BinaryTree类型。

我很难定义一个算法来读取像这样的表达式

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

把它放在这样的树上

             /
        ^          2
    *       3
  5   +
     2  3

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

共有2个答案

向苗宣
2023-03-14

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

胡越
2023-03-14

看看调车场算法。来自维基百科:

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

 类似资料:
  • 我正在尝试将后缀表达式转换为二叉树。My函数将标记(字符串)列表作为参数。 每次我给函数任何输入时,调试器都会写一条消息:函数“add”中的非穷举模式。 我的想法是:一个接一个地读取标记,然后确定它是运算符还是操作数。如果是操作数,则不要将任何节点保存到树中,并将数字存储到堆栈中。否则,我用操作符创建一个节点,从堆栈中弹出符号,将它们设置为新节点的子节点,并将操作符推送到堆栈中。 如果字符串列表为

  • 本文向大家介绍将中缀转换为后缀表达式,包括了将中缀转换为后缀表达式的使用技巧和注意事项,需要的朋友参考一下 前缀表达式是人类可读和可解的。我们可以轻松地区分算子的顺序,也可以在计算数学表达式时先使用括号将其求解。计算机无法轻松地区分运算符和括号,这就是为什么需要后缀转换的原因。 要将中缀表达式转换为后缀表达式,我们将使用堆栈数据结构。通过从左到右扫描infix表达式,当我们得到任何操作数时,只需将

  • 本文向大家介绍将中缀转换为前缀表达式,包括了将中缀转换为前缀表达式的使用技巧和注意事项,需要的朋友参考一下 要通过计算机求解表达式,我们可以将其转换为后缀形式或前缀形式。在这里,我们将看到中缀表达式如何转换为前缀形式。 首先,中缀表达式反转。注意,对于反转,圆括号也将反转。 例如:表达式:A + B *(C-D) 反转后的表达式为:)D – C(* B + A 因此我们需要将左括号转换为右括号,反

  • 本文向大家介绍在C ++中将三元表达式转换为二叉树,包括了在C ++中将三元表达式转换为二叉树的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将讨论将三元表达式转换为二叉树的程序。 为此,我们将提供一个三元表达式。我们的任务是根据可能的各种路径(选择),以二叉树的形式转换给定的表达式。 示例 输出结果

  • 本文向大家介绍中缀表达式转后缀表达式相关面试题,主要包含被问及中缀表达式转后缀表达式时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 对于中缀表达式,遇到操作数直接将其输出,如果遇到操作符和左括号全部压入栈中,若遇到右括号则将栈中元素全部弹出,直到遇到左括号为止。压栈过程中,若遇到其它操作符,从栈中弹出元素直到遇到更低优先级的操作符为止。

  • 我的讲师给了我一个任务,让我创建一个程序,使用堆栈将表达式和中缀转换为后缀。我制作了堆栈类和一些函数来读取中缀表达式。 但是这个函数,叫做,它负责使用堆栈将数组inFix中的inFix表达式转换为数组postFix中的postfix表达式,并没有做它应该做的事情...你们能帮帮我告诉我哪里做错了吗? 下面是从中缀转换为后缀的函数的代码,是我需要帮助修复的代码: 注意:convertToPostfi