data-structures - 为字母方程创建二叉树
问题描述
我必须创建一个二叉树才能从标记列表中获取有效句子。
例如:- 我有一组标记 - ['(', 'one', '.', 'two', '.', '(', 'zero', '|', 'o', ')' , '。', '六', ')']
从中我想获得如下句子的结果:-
一二零六
一二六六
这里 ”。” 表示连接运算符,“()” - 需要分组运算符,“|” 或连接运算符,[] - 可选分组运算符
我已经从字母方程式创建了标记。但是我无法创建正确的二叉树结构,因此我可以创建一棵树,这样每当我遍历树时,我就可以从标记中获取这些句子
我可以编写二叉树的代码,但我一直在为相同的逻辑创建逻辑
另一个例子是:-
输入 - ['(', '(', '(', 'one', '.', 'two', ')', '|', '12', ')', '.', '(' , '零', '|', 'o', ')', '.', '六', ')']
输出-
一二零六
一二六六
十二点六
解决方案
将其视为方程解析器很有用。你所拥有的是这个等式:
(("one" . "two") | "twelve") . (("zero" | "0") . "six")
然后,您可以从底部构建树。("one" . "two")
看起来像这样:
.
/ \
"one" "two"
当然,“十二”本身就是一个节点。为了完成第一部分,你把“|” 作为父节点,像这样:
|
/ \
. "twelve"
/ \
"one" "two"
那给你(("one" . "two") | "twelve")
。
你对等式的另一半做同样的事情,并添加一个“。” 算子作为根节点。
在解析时有一种正式的构建树的方法,使用的是Shutting-yard algorithm的修改。
推荐阅读
- java - Rest Web 服务接口 - 多线程
- c++ - C++ 模板函数的重载错误
- html - 将 div 中的 span 元素水平居中对齐
- javascript - 嵌套循环返回限制
- c++ - libav c++ raw h264 TCP Stream to opencv Mat
- html - 当宽度不适合所有元素时,引导响应式导航栏将元素放置在新行上
- r - R:read.table 分隔符每 XX 个字符
- javascript - 使用正则表达式获得“编译警告”
- android - Android:Firebase Cloud Messaging 在显示通知以过滤消息之前运行代码
- node.js - 随机数据结构