为字母方程创建一个二叉树

create a binary tree for alphabetical equation

我必须创建一个二叉树来从标记列表中获取有效句子。

示例:- 我有一组标记 - ['(', 'one', '.', 'two', '.', '(', 'zero', '|', 'o', ')', '.', 'six', ')']

我想从中获得如下句子的结果:-

一二零六

一二零六

这里是“.”表示串联连接运算符,“()” - 需要分组运算符,“|”或连接运算符,[] - 可选分组运算符

我已经根据字母顺序创建了记号 equation.But 我无法创建合适的二叉树结构,因此我无法创建一棵树,无论何时遍历树,我都会从中获取这些句子代币

我可以写二叉树的代码,但我一直在为它创建逻辑

另一个例子是:-

输入-['​​(', '(', '(', 'one', '.', 'two', ')', '|', 'twelve', ')', '.', '(', 'zero', '|', 'o', ')', '.', 'six', ')']

输出-

一二零六

一二零六

十二点六

将其视为方程解析器很有用。你得到的是这个等式:

(("one" . "two") | "twelve") . (("zero" | "0") . "six")

然后您可以从底部构建树。 ("one" . "two") 看起来像这样:

            .
         /     \
      "one"   "two"

"twelve"当然是一个单独的节点。为了完成第一部分,你把“|”作为父节点,像这样:

             |
         /       \
       .       "twelve" 
    /     \
 "one"   "two"

这给了你 (("one" . "two") | "twelve")

你对等式的另一半做同样的事情,加上一个“。”运算符作为根节点。

有一种在解析时构建树的正式方法,使用对 Shunting-yard algorithm.

的修改